classaa
(const a & a )~a
()};
a f(
)int
main()
/*dev c++輸出結果:
1 constructor called
10 constructor called
10 destructor called
10 destructor called
visual studio輸出
結果:1 constructor called
10 constructor called
copy called //f()執行return語句時,在函式作用域之外建立乙個臨時物件,這個臨時物件用返回的物件進行初始化。這個臨時物件額建立就會導致複製建構函式被呼叫。臨時物件的值被賦值給a(這裡是賦值操作)。
10 destructor called //返回值臨時物件被銷毀
12 destructor called //由於執行過一次複製建構函式,因此原本的10被+了2。
12 destructor called //由於執行過一次複製建構函式,因此原本的10被+了2。
*/
這個例子說明dev出於優化目的並未生成返回值臨時物件。而vs無此問題。 編譯器合成複製建構函式
定義 只有單個形參,該形參是對本類型別物件的引用 常用const修飾 這樣的建構函式成為複製建構函式。使用方式 1 顯示使用 用乙個同型別的物件初始化該物件時 2 隱式使用 將該型別的物件傳遞給函式或從函式返回該型別物件時。三種型別的複製建構函式 bitwise copy constructor 逐...
編譯器角度看C 複製建構函式
關於複製建構函式的簡單介紹,可以看我以前寫過的一篇文章 複製控制之複製建構函式該文章中介紹了複製建構函式的定義 呼叫時機 也對編譯器合成的複製建構函式行為做了簡單說明。本文因需要會涉及到上文的一些知識點,但還是推薦先閱讀上文。本文主要從編譯器角度對複製建構函式進行分析,糾正以前對複製建構函式的一些錯...
(原創)後置 在不同編譯器中的行為
intx 0 x x 請問上述兩行 執行之後,x的值是什麼?有的同事說 1,有的同事說 0,究竟是什麼呢,試試就知道。試了三個編輯器,inter gcc和vc 自帶的cl inter 和gcc 得出的結果都是0,vc得出的結果是1。究竟哪個對呢?讓我們再看看那兩行 第一行不用多說,把乙個變數賦值為 ...