#include <iostream>
using namespace std;
class myclass {
public:
myclass();
myclass(const myclass &o);
myclass f();
};
myclass:: myclass(){
cout<<"Constructing normally"<<endl;
};
myclass:: myclass(const myclass &o){
cout<<"Constructing copy"<<endl;
};
myclass myclass::f(){
myclass temp;
return temp;
};
int main(){
myclass obj;
obj = obj.f();
return 0;
}
私はプログラムの出力がなければならないことを示して本の中で、この例を見つけました:コピーコンストラクタが機能し始めたら?
Constructing normally
Constructing normally
Constructing copy
しかし、私は自分のコンパイラでコンパイルするときにのみ
Constructing normally
Constructing normally
の下に書かれた出力を示しています
内部で実際に何が起こっていますか?すなわちcout
コール -
それはあなたのコンパイラが二行目のために離れてコピーを最適化しました 'OBJ = obj.f()を意味する。?' – EdChum
私はそれを得ることができませんでした:(あなたはそれを詳しく説明してくださいすることができ – IAmBlake
読む戻り値について最適化とコピーエリジョン(あなたの本は古いかもしれません)。 –