下面是一個簡單的例子:一個變量聲明創建了多個實例
class A {
public:
A() {
printf("%p C1\n", this);
}
A(const char* p) {
printf("%p C2\n", this);
}
};
int main(int argc, char *argv[]) {
A a;
a = "abc";
}
在代碼中,雖然A
聲明只有一次,也有越來越創建的A
兩個實例。構造函數被調用兩次。我可以在VS 2013以及gnu C++中重現這一點。
想知道這是行爲錯誤還是規範的一部分。
您可以通過定義一個'A ::運算符=(爲const char *)避免臨時' (或者更好的'A :: operator =(std :: string const&)')。 – Walter 2015-03-13 16:56:22
'想知道這個行爲是否是一個錯誤'您使用了全世界數以千計的人和公司使用的兩種編譯器,並且從這些不重要的代碼中獲得了相同的結果。鑑於此,這是一個錯誤有什麼機會? – PaulMcKenzie 2015-03-13 17:05:12
@MatthewMoss我在評論最後的問題真的是諷刺。該程序是一個玩具程序,g ++和Visual Studio被成千上萬的人使用。如果這是一個錯誤,它會在整個網絡上報告(再加上兩個獨立的編譯器廠商會用這樣一個非常簡單的程序產生相同的錯誤)。 – PaulMcKenzie 2015-03-13 17:38:51