深度探索C++ 对象模型(4)-Default Copy Constructor(3)
生活随笔
收集整理的這篇文章主要介紹了
深度探索C++ 对象模型(4)-Default Copy Constructor(3)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
程序轉化語意學
1. 顯式初始化
原代碼為:
X x0; void foo_bar() { X x1(x0);X x2 = x0; X x3 = X(x0);}編譯器將產生拷貝構造函數,調用拷貝構造函數X::X(const X& xx):
void foo_bar() { X x1; X x2; X x3; x1.X::X(x0); x2.X::X(x0); x3.X::X(x0); }2. 參數初始化
原代碼為:
X xx; foo(xx);被轉化為:
X __temp0; __temp0.X::X(xx); foo(__temp0);3. 返回值初始化
原代碼為:
X bar() {X xx; // 處理 xx ... return xx; }被轉化為:
void bar(X& __result) { X xx;xx.X::X(); __result.X::X(xx); return; }再次優化:
void bar(X& __result) { __result.X::X(); //直接處理return; }也可以程序優化:
X bar(const T& y, const T& z) { return X(y, z); }4. 例子總結:
X xx = bar(); <=> X xx; bar(xx); bar().memfunc(); <=> X __temp0; (bar( __temp0 ), __temp0).memfunc(); x( *pf )();//函數指針 pf = bar; <=> void ( *pf )( X& ); pf = bar;5. 效率比較
X xx0(1024); <=> xx0.X::X(1024);xx1 xx2 調用兩次構造函數,一次是構造函數,另一次是拷貝構造函數
X xx1=X(1024); X xx2=(X)1024; <=> X __temp0; __temp0.X::X(1024); xx1.X::X(__temp0); __temp0.X ::~X();【引用】
[1]: <<深度探索C++ 對象模型 Inside The C++ Object Model >> Stanley B.Lippman 候捷 譯
總結
以上是生活随笔為你收集整理的深度探索C++ 对象模型(4)-Default Copy Constructor(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度探索C++ 对象模型(4)-Defa
- 下一篇: 深度探索C++ 对象模型(4)-Defa