単一パラメーター以外のコンストラクターが明示的にコンパイルされる理由を説明できる人はいますか? 私が理解している限り、これはここではまったく役に立たないキーワードですが、なぜこれはエラーなしでコンパイルされるのでしょうか?
class X
{
public:
explicit X(int a, int b) { /* ... */}
};
単一パラメーター以外のコンストラクターが明示的にコンパイルされる理由を説明できる人はいますか? 私が理解している限り、これはここではまったく役に立たないキーワードですが、なぜこれはエラーなしでコンパイルされるのでしょうか?
class X
{
public:
explicit X(int a, int b) { /* ... */}
};
C++03 では、この特定のケースでは、2 つのパラメーターのコンストラクターがマークされても意味がありませんexplicit
。しかし、ここでは理にかなっている可能性があります。
explicit X(int i, int j=42);
したがって、2 つのパラメーターのコンストラクターを でマークしexplicit
ても、エラーになる必要はありません。
C++11 では、この明示的な使用により、これを行うことができなくなります。
X x = {1,2};
完全に真実ではありません。
C++11 では、複数の引数を持つコンストラクターは、ブレースの初期化を使用して暗黙的に変換できます。