【C++】コンストラクタでコンストラクタの呼び出しをコンストラクタと思わない【C26444】

タイトルがカオス。

C++ C26444 Warningというのに出くわしました。

class Test
{
public:
    Test(){}
    virtual ~Test(){}
    Test(std::string buffer) { m_buffer = buffer; }
    Test(int data) { Test(std::to_string(data)); }  // ← ここでWarning C26444
private:
    std::string m_buffer;
}

これは

Constructorを呼んでいるのではなくTestクラスの名前のない変数を宣言して引数に値を渡している扱いになるようです。

class Test
{
public:
    Test(){}
    virtual ~Test(){}
    Test(std::string buffer) { m_buffer = buffer; }
    Test(int data) : Test(std::to_string(data)) { }  // : の初期化時にコンストラクタを呼べば変数宣言扱いにならない!
private:
    std::string m_buffer;
}

このように書けばWarningは回避できそうです。

 

コメント

タイトルとURLをコピーしました