#include <iostream>
using namespace std;
class X {
public:
X() {
cout<<"Cons"<<endl;
}
X(const X& x){
cout<<"Copy"<<endl;
}
void operator=(const X& x){
cout<<"Assignment called";
}
};
X& fun() {
X s;
return s;
}
int main(){
X s = fun();
return 0;
}
このコードは、コピーコンストラクターも呼び出します。なぜこれが機能するのですか?このプログラムを初めて実行したとき、セグメントに障害が発生したことを思い出します。しかし、しばらくして、それはこのコピーの短所を呼び始めました。そして今は動作します!! Wierd。
しかし、私が置き換えると、fun()は次のようになります。
X fun() {
X s;
return s;
}
次に、短所をコピーします。は呼び出されません。コピーの短所だと思いました。この場合は呼び出されます。しかし、@ flyfishr64が指摘しているように、ここではRVOが登場します。しかし、それでも私が参照を返す場合については説明していません。私はそれが常にセグメンテーション違反であるべきだと思います。
説明はありますか?