[問題] 傳遞多個引數是否會自動建構成類別物件

看板C_and_CPP作者 (@@)時間10年前 (2013/08/09 11:43), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/2 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 今天無意間發現我不太能解釋這個現象 : class Bar : { : public: : Bar(int a) : { : } : ~Bar() : { : } : }; : void Foo(Bar &a) : { : } : int main() : { : Foo(56); : } : 這不會過 但我不太會解釋 是為什麼 : 是因為R value嗎? : 但是我加上const後 : 就可以build過了~~ : void Foo(const Bar &a) : 我更想不懂 為什麼有差別了 : 請各位指點迷津謝謝~ 小弟看了這題目後有幾個問題, Foo(56)是用const temp變數存 56 ? 然後再一個temp Bar物件利用上面的const temp變數去建構? 以上的推論是對的嗎? 若推論正確,那建構子的變數有多個時, 如 Bar的建構子為Bar(int A,char b) 若傳入Foo(56,'b')也會自動建構Bar嗎? 另外,若Bar的建構子有多個的情況, 會自動搜尋對應的建構子嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.74.180.10

08/09 11:48, , 1F
不會
08/09 11:48, 1F

08/09 11:50, , 2F
謝謝,兩個都不會嗎?
08/09 11:50, 2F

08/09 12:11, , 3F
抱歉...剛剛講不清楚
08/09 12:11, 3F

08/09 12:13, , 4F
1. 是的, 編譯器會嘗試幫你轉型成 Bar(56)
08/09 12:13, 4F

08/09 12:14, , 5F
2. 這種"隱式轉換"只會去找單一參數的建構子
08/09 12:14, 5F

08/09 12:47, , 6F
沒錯, 如果要避免, 可在 constructor 前面加上 explicit
08/09 12:47, 6F
文章代碼(AID): #1I16LT0B (C_and_CPP)
文章代碼(AID): #1I16LT0B (C_and_CPP)