我很困惑,如果這很明顯,我很抱歉。我錯了,在以下內容:爲什麼當我分配該類的兩個對象時,我的構造函數被調用?
struct MyStruct
{
MyStruct(){};
MyStruct(MyStruct* arg){};
}
MyStruct(MyStruct * arg){};是一個構造函數將一個指針指向一個MyStruct作爲參數?
因爲我有一個問題,當我這樣做此構造函數(我認爲這是)被稱爲:
int main()
{
MyStruct obj;
MyStruct* objPtr;
obj = objPtr;
return 0;
}
何時objPtr分配OBJ我預計編譯器抱怨,但它不」 t,而是調用MyStruct(MyStruct * arg);我認爲這是一個帶指針參數的構造函數。
任何幫助,將不勝感激。另外,如果我向該類添加複製賦值運算符,它仍然會發生。
編輯:謝謝你的答案。它看起來像我有一些閱讀要做到這一點,這個話題似乎(任何人想知道)在C++中轉換構造函數。另外我猜猜明確的關鍵字。下面是一個SO問題一個鏈接,解釋它:
What is a converting constructor in C++ ? What is it for?
也許註釋,如果非默認構造函數是'顯式的',這不會發生。 - 哦!你剛剛做到了! –
@MartinBonner,你的意思是我剛添加的那個? – StoryTeller
這很混亂。因此,編譯器認爲賦值運算符接受一個MyStruct的引用,並且它看到一個指針,而不是說它是不匹配,而是在等號後面用指針作爲構造函數的參數構造一個新對象。這很混亂。這是正常的嗎?我有權混淆嗎?這個東西有一個特殊的名字,所以我可以查看它?哇。謝謝。 – Zebrafish