私は最近、次のようなクラスに出くわしました
class Foo {
public:
Foo(std::string msg) {}
private:
Foo(bool b) {}
};
このクラスのオブジェクトを作成しようとしていることに気付きました
Foo foo("blah");
Foo::Foo(bool)
非公開であることを示すコンパイル エラーが発生します。どうやら、引数が実際の std::string でない場合、コンパイラはbool
引数でコンストラクターを使用することを好みます。一方、プライベート コンストラクターが指定されていない場合、上記のコードは正常にコンパイルされます。
渡された引数の型がそれらのいずれにも適合しないにもかかわらずbool
、「 -constructor 」が「 -constructor 」よりも優先されるのはなぜですか? string
これは単なる定義の問題ですか、それとももっと深い意味と正当な理由があるのでしょうか?