看板 Programming 關於我們 聯絡資訊
對於下列的程式 1 //宣告class C 2 class C{ 3 ... 4 }; 5 //f函數 6 C f(){ 7 C c; 8 return c; 9 } 10 11 int main(int argc, char **argv){ 12 C c1=f(); 13 return 0; 14 } 請問一下 第8行的return敘述會導致新的C物件額外產生嗎?因此C的constructor再被再呼叫? 第7行宣告的c它的 destructor會何時被呼叫(a.)離開f()時 (b.)還是離開main時 感謝回覆 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.232.241.63
akasan:可能會被呼叫 也有可能不會218.165.171.114 05/16 17:46
akasan:完全看compiler實作與最佳化程度了218.165.171.114 05/16 17:46
akasan:google it -> NRV optimize218.165.171.114 05/16 17:47
th19883617:就我所知 若不是用pointer或refernce 140.113.249.9 05/16 21:07
th19883617:他會呼叫class預設複製建構子 140.113.249.9 05/16 21:07
adrianshum:另,7 的 c 該在 f() 完結被 destruct 220.246.198.75 05/17 21:10
adrianshum:不過 NRV 的情況該還會再遲一點點 220.246.198.75 05/17 21:10