1. ホーム
  2. c++

[解決済み] 複数の引数を取る明示的なコンストラクタ

2023-01-01 02:54:09

質問

複数の引数を持つコンストラクタを作ることはできますか? explicit にすることで、何か(有益な)効果があるのでしょうか?

class A {
    public:
        explicit A( int b, int c ); // does explicit have any (useful) effect?
};

どのように解決するのですか?

C++11 までは、そうです。 explicit を使用する理由はありません。

C++11 では、イニシャライザー リストがあるため、この点が変更されます。基本的に、初期化リストを使用したコピー初期化(直接初期化ではない)は、コンストラクタに explicit .

例です。

struct Foo { Foo(int, int); };
struct Bar { explicit Bar(int, int); };

Foo f1(1, 1); // ok
Foo f2 {1, 1}; // ok
Foo f3 = {1, 1}; // ok

Bar b1(1, 1); // ok
Bar b2 {1, 1}; // ok
Bar b3 = {1, 1}; // NOT OKAY