警告C26495函数从构造函数调用到初始化变量,为什么?

时间:2019-02-25 12:20:43

标签: c++

注意::在VS中启用Microsoft本机推荐规则。

我不是在构造器/初始化器列表中初始化数据成员,而是由于数据成员过多,这些数据成员被复制到函数中,然后从构造器中调用函数。

此警告消息是否有任何特定原因。

警告C26495:变量'Person :: m_id'未初始化。始终初始化成员变量(类型6)。

class Person
{
    std::string m_name;
    int m_id; 
    /* Other data members*/

public:

    Person()
    {
        initialize();
    }

    void initialize()
    {
        m_name = "someText";
        m_id = 1;
        /* Other data members initialization*/
    }

};

1 个答案:

答案 0 :(得分:4)

收到警告是因为您没有在构造函数中初始化成员或使用初始化列表。您在函数调用中执行操作的事实不会被“捕获”,因为它不会为每个简单的警告检查而检查每个函数调用。它很快就会变成检查功能的巨大树。

您可能不会收到有关字符串的警告。这是因为当您不对其进行初始化时,它将使用其默认构造函数来构造一个长度为零个字符的空字符串。因此,您的字符串实际上已初始化。但是对于 int 这样的基本类型,没有这样的默认“构造函数”

http://www.cplusplus.com/reference/string/string/string/