静态成员变量初始化c ++

Ale*_*Dan 0 c++ static

  1. 当我没有将值初始化为静态成员变量时,为什么编译器会给我一个错误?它不应该被初始化为0吗?
  2. 为什么我必须在类外初始化成员变量?(这是非法的,因为如果你这样做,并在main函数中更改这个静态成员变量的值,你创建了这个clas的对象,它会将静态mamber变量重新赋值给旧值)而const static成员变量在类中是合法的(这是可能的,因为你无论如何都不能改变这个静态成员变量的值)?

错误:对class_name :: a的未定义引用

hmj*_*mjd 5

从发布的错误中,链接器声明该变量尚未定义,而不是尚未显式初始化:

class A
{
    // declaration.
    static int x;
};

// definition (in this case without explicit initialisation).
int A::x;
Run Code Online (Sandbox Code Playgroud)

链接器不应发出错误,并且编译器不应发出警告,只要在为static变量分配初始值之前未尝试使用该变量.