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不推薦使用。 – 2012-03-25 07:39:02
@JamesMcNellis:嗯,你說得對,即使是用'/ Wall'(無論如何它基本上是無法使用的)。它*不會警告'test aa = test(2);',這是它應該產生的東西,但不是別的。 – GManNickG 2012-03-25 07:48:43
@JamesMcNellis:我發現vs不調用copy-constructor,它調用'test(int num)'。 – skeu 2012-03-25 08:11:36