我最近碰到一個類來了,如同下面重載的構造 - constructur與布爾的說法具有優先
class Foo {
public:
Foo(std::string msg) {}
private:
Foo(bool b) {}
};
我注意到,試圖通過
Foo foo("blah");
原因手段來創建這個類的一個對象編譯錯誤告訴Foo::Foo(bool)
是私人的。顯然,如果參數不是一個實際的std :: string,編譯器更喜歡使用帶有參數bool
的構造函數。另一方面,如果私人構造函數沒有給出,上面的代碼編譯就好了。
爲什麼「bool
-constructor」的優先級高於「string
-constructor」?如果傳遞的參數類型不適合其中的任何一個?這只是一個定義問題,還是它有更深的含義和一些很好的理由?
不能確定*爲什麼*,但他們應該(可能)都是「明確的」。 – 2013-03-11 16:00:40
實際上,顯式關鍵字不會改變行爲 – symphonic 2013-03-11 16:02:16
它不會在這種情況下。 – 2013-03-11 16:07:58