7

単一パラメーター以外のコンストラクターが明示的にコンパイルされる理由を説明できる人はいますか? 私が理解している限り、これはここではまったく役に立たないキーワードですが、なぜこれはエラーなしでコンパイルされるのでしょうか?

class X
{
public:
    explicit X(int a, int b) { /* ... */}
};
4

2 に答える 2

10

C++03 では、この特定のケースでは、2 つのパラメーターのコンストラクターがマークされても意味がありませんexplicit。しかし、ここでは理にかなっている可能性があります。

explicit X(int i, int j=42);

したがって、2 つのパラメーターのコンストラクターを でマークしexplicitても、エラーになる必要はありません。

C++11 では、この明示的な使用により、これを行うことができなくなります。

X x = {1,2};
于 2013-11-27T13:43:44.653 に答える
8

完全に真実ではありません。

C++11 では、複数の引数を持つコンストラクターは、ブレースの初期化を使用して暗黙的に変換できます。

于 2013-11-27T13:45:43.673 に答える