非静态const数据成员

Ati*_*hay 7 c++ initialization members

如何在C++中定义类的非静态const数据成员?如果我尝试编译以下代码:

class a
{
public:
    void print()
    {
        cout<<y<<endl;
    }
private:
    const int y=2;
};

int main()
{
    a obj;
    obj.print();
}
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

ISO C++ forbids initialization of member ‘y’
Run Code Online (Sandbox Code Playgroud)

tem*_*def 27

在C++ 03中,您可以const使用构造函数中成员初始化列表初始化类的字段.例如:

class a
{
public:
    a();

    void print()
    {
        cout<<y<<endl;
    }

private:
    const int y;
};

a::a() : y(2)
{
    // Empty
}
Run Code Online (Sandbox Code Playgroud)

注意: y(2)构造函数之后的语法.这告诉C++将字段初始化为y值2.更一般地,您可以使用此语法将类的任意成员初始化为您希望它们具有的任何值.如果您的类包含const作为引用的数据成员或数据成员,则这是正确初始化它们的唯一方法.

请注意,在C++ 11中,放宽了此限制,可以将值分配给类主体中的类成员.换句话说,如果你等待几年来编译你的原始代码,它应该编译得很好.:-)

  • @ Atishay-"y"的空间将分配给对象的空间.如果通过`new`动态分配对象,它将被放入堆中.如果在堆栈上自动分配对象,它将被放入堆栈中.如果对象是全局声明的,它将被放置在全局对象所在的任何位置. (2认同)

ten*_*our 6

在构造函数初始化列表中初始化它.

class a
{
  const int y;
public:
  a() : y(2) { }
};
Run Code Online (Sandbox Code Playgroud)