看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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)
loveme00835:T newT = T(); 06/16 01:51
感謝 !! 所以代換回去就像是 int test = int(); 的意思嗎 ?? 也就是 內建型別 + () 類似 class default constructor ? ※ 編輯: cory8249 來自: 140.114.221.54 (06/16 02:13)
loveme00835:此時會用 default ctor 建構一個暫時物件, 再呼叫 06/16 07:47
loveme00835:copt ctor 來拿暫時物件初始化 newT, 當然如果有作最 06/16 07:48
loveme00835:佳化的話, 可能變成 newT 直接以 default ctor 來建構 06/16 07:48
purincess:樓上的意思是return value optimization嗎@@? 06/16 15:32
Chikei:copy elision應用在copy ctor,RVO通常講的是另外的事。 06/16 15:53
purincess:了解! 06/16 16:30
purincess:查到了:D 謝謝 06/16 16:30
purincess:所以說~如果T()的ctor有side effect的話有可能side effe 06/16 16:31
purincess:ct會沒出來(因為被copy elide掉了?) 06/16 16:32