const成员变量只能在构造函数初始化表中初始化


书上这么说

网上甚至说直接在声明时初始化会编译不通过

但是在VS2013中,这么写却通过了。
class Test
{
public:
    Test(){
        cout << "constructing...\n"; 
        cout << m_Value;
    }
    ~Test(){ cout << "destructing...\n"; }
    
private:
    const int m_Value = 10;
};


卫生么呢
已邀请:

meow_1234

赞同来自:


上面的写法在 Dev C++中给出了一个警告(VS2013中任何警告都没有)
[Warning] non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]


PS: 将VS2013中平台工具集改成了VS2010,就报错了
error C2864: “Test::m_Value”: 只有静态常量整型数据成员才可以在类中初始化
error C2758: “Test::m_Value”: 必须在构造函数基/成员初始值设定项列表中初始化


大概是 C++ 11 中对这个限制做了更改吧

要回复问题请先登录注册