我真的不能想到一個特定的標題,因爲我真的不知道該怎麼說。我對此非常困惑,因爲我之前的問題沒有得到真正的答案,但只會讓我更加困惑。我的另一個question問複製構造函數沒有被調用,麻煩理解賦值操作符如何工作
定義VS設置的std :: string中的std :: string設置成0比0
用戶mnciitbhu說,他在GCC 5.2得到一個錯誤。我正在使用Microsoft Visual Studio,所以我在Code :: Blocks上試過,並且沒有錯誤。除此之外,我想爲自己嘗試一下。我有一個類 - Test
class Test {
public:
Test(const Test& T) {
std::cout << "COPY CTOR\n";
}
Test(){
std::cout << "DEFAULT CTOR\n";
}
Test(int NUMBER) {
std::cout << "INT CTOR CALLED\n";
}
};
在我的主要功能,當我做
Test t1 = 5;
t1 = 10;
輸出
INT CTOR CALLED
INT CTOR CALLED
現在在那裏我得到困惑是當喲你做Test t1 = 5
,另一個問題的用戶說它會創建一個臨時的Test
,然後調用複製構造函數。這永遠不會調用複製構造函數。另外,關於我的另一個問題;當我做了
// text = std::string
text = NULL;
其中一個答案說,它沒有工作,因爲它沒有定義operator=
。我Test
類也從未定義它,但這樣做
t1 = 10;
仍然有效,並再次調用構造函數。其他question上的一位用戶表示,在這種情況下,它將調用賦值運算符。這並沒有,正如你從輸出中可以看出的那樣。所以,可能有人請解釋一下,很詳細,爲什麼
std::string text = NULL;
text = NULL;
給我一個錯誤,並
Test t1 = 5;
t1 = 10;
作品,並不會調用拷貝構造函數,並調用構造函數的兩倍。
實際在做什麼=
?爲什麼它調用構造函數,當我做t1 = 10
你的例子的輸出應該包含'INT CTOR CALLED'而不是'DEFAULT CTOR',錯字? – fghj
@ user1034749是的,謝謝你,這是一個錯字 –
那麼,你的問題是什麼?如果你想在你的代碼上編譯時間錯誤,可以在你的'Test'構造函數中添加'explicit',就像這樣'explicit Test(int NUMBER)' – fghj