2

私は C++11 を学ぼうとしている C プログラマーですが、理解できない問題に遭遇しました。私が知る限り、次の問題は値の初期化と直接の初期化の違いです。

次のコード スニペットは、Visual Studio を使用してコンパイルされません。

class TestClass {
    int _val;
    std::string _msg;
public:
    TestClass(int, std::string);
    void action();
};

TestClass::TestClass(int val, std::string msg)
    : _val{val}, _msg{msg}
{
}

void TestClass::action()
{
    std::cout << _msg << _val << std::endl;
}

それは私に与えます:

エラー C2797: 'TestClass::_msg': メンバー初期化子リスト内のリスト初期化または非静的データ メンバー初期化子が実装されていません

ただし、変更

TestClass::TestClass(int val, std::string msg)
    : _val{val}, _msg{msg}

TestClass::TestClass(int val, std::string msg)
    : _val{val}, _msg(msg)

私の問題を修正します。これら 2 つの初期化形式の違いは何ですか?また、どちらを使用する必要がある場合は? 明示的な型を扱うときは常に値の初期化を使用する必要があると信じるようになりました。

4

1 に答える 1