1
Visual Studio(2008)およびg ++でコードをコンパイルしようとしています。
vs2008では正常ですが、g ++ではエラーが報告されました。
const
を追加した場合、
test(const test &source):a(source.a) {}
G ++は成功してコンパイルします。
私は、test aa = 2;
が一時オブジェクトを作成し、copy-constructorを呼び出すことを確認しました。
一時オブジェクトは非const参照にバインドできません
だから、なぜvs2008がコンパイルできますか?コピーコンストラクタ付きvs/g ++について
class test{
public:
test():a(1) {}
test(int num):a(num) {}
test(test &source):a(source.a) {}
private:
int a;
};
int main(){
test aa = 2;
return 0;
}
残念なことに、警告はありません。/Zaは非標準動作を無効にしますが、/ Zaは使用を推奨しません。 –
@JamesMcNellis:ああ、あなたは正しいです、 '/ Wall'(これは基本的には使えません)でも。それは 'test aa = test(2);'で警告しますが、これは生成するべきものですが、そうでなければそうではありません。 – GManNickG
@ JamesMcNellis:コピーコンストラクタを呼び出さないのは、 'test(int num)'を呼び出すことです。 – skeu