私は最近、私はオーバーロードコンストラクタ - ブール引数を持つconstructurが優先
Foo foo("blah");
の原因により、このクラスのオブジェクトを作成しようとしていることに気づいた次
class Foo {
public:
Foo(std::string msg) {}
private:
Foo(bool b) {}
};
のようにクラスに出くわしましたFoo::Foo(bool)
がプライベートであることを示すコンパイルエラー。明らかに、引数が実際のstd :: stringでない場合、コンパイラはbool
引数を持つコンストラクタを使用することを推奨します。一方、プライベートコンストラクタが与えられていない場合、上記のコードはうまくコンパイルされます。
"bool
-constructor"が "string
-constructor"よりも優先されるのはなぜですか?渡された引数の型がそのいずれにも適合しないのはなぜですか?これはちょうど定義の問題か、それは深い意味といくつかの正当な理由がありますか?
わからない*関与優先チェックの深さの説明に多くを持っている同様の問題である理由*が、彼らは(おそらく)どちらも「明示的」であるべきです。 –
実際には、明示的なキーワードは動作を変更しません – symphonic
この場合はそうではありません。 –