[問題] template function 內建型別物件初始化

看板C_and_CPP (C/C++)作者 (Cory)時間14年前 (2012/06/16 01:44), 編輯推噓0(0010)
留言10則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C++ / GCC 問題(Question): 如何對任意的 template 的 T 做初始化 ? 假設 template<class T> T demo() { T newT; // 如何初始化 newT ? return newT; } 我知道 如果 T 是 class 會自動呼叫 default constructor 但是如果 T 是 built-in type 像是 int 好了 一般都會寫 int newT = 0; 但是 template 不能這樣寫 ... 所以我在想到底該如何 對所有的 T 做初始化的動作 後來用一個爛招 T *initT = new T(); T newT = *initT; delete initT; 因為 new T() 才會保證初始化吧 ? 但是多一步 感覺很冗 = =" 不過剛學 也想不到別招了 ... 所以想請問各位高手 有比較正確簡單的方式可以完成初始化嗎 ? 感謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.114.221.54 ※ 編輯: cory8249 來自: 140.114.221.54 (06/16 01:44)

06/16 01:51, , 1F
T newT = T();
06/16 01:51, 1F
感謝 !! 所以代換回去就像是 int test = int(); 的意思嗎 ?? 也就是 內建型別 + () 類似 class default constructor ? ※ 編輯: cory8249 來自: 140.114.221.54 (06/16 02:13)

06/16 07:47, , 2F
此時會用 default ctor 建構一個暫時物件, 再呼叫
06/16 07:47, 2F

06/16 07:48, , 3F
copt ctor 來拿暫時物件初始化 newT, 當然如果有作最
06/16 07:48, 3F

06/16 07:48, , 4F
佳化的話, 可能變成 newT 直接以 default ctor 來建構
06/16 07:48, 4F

06/16 15:32, , 5F
樓上的意思是return value optimization嗎@@?
06/16 15:32, 5F

06/16 15:53, , 6F
copy elision應用在copy ctor,RVO通常講的是另外的事。
06/16 15:53, 6F

06/16 16:30, , 7F
了解!
06/16 16:30, 7F

06/16 16:30, , 8F
查到了:D 謝謝
06/16 16:30, 8F

06/16 16:31, , 9F
所以說~如果T()的ctor有side effect的話有可能side effe
06/16 16:31, 9F

06/16 16:32, , 10F
ct會沒出來(因為被copy elide掉了?)
06/16 16:32, 10F
文章代碼(AID): #1FstHeDa (C_and_CPP)
文章代碼(AID): #1FstHeDa (C_and_CPP)