在main中初始化静态类变量

vrb*_*lgi 7 c++ static initialization

我在课堂上有一个静态变量.我正在初始化它在全球范围内,它的工作正常.

但是当我尝试在主链接器中初始化时抛出一个错误.为什么这样.

class Myclass{

    static int iCount;
} ;

int main(){

  int Myclass::iCount=1;

}
Run Code Online (Sandbox Code Playgroud)

在全局范围内,为什么我必须指定变量类型

int Myclass::iCount=1;
Run Code Online (Sandbox Code Playgroud)

在我的课堂上,我将iCount定义为整数类型,为什么不呢.

   Myclass::iCount =1 ; in //Global scope
Run Code Online (Sandbox Code Playgroud)

Naw*_*waz 5

C++标准中的$ 9.4.2/7部分说,

静态数据成员的初始化 和销毁与非本地 对象完全相同(3.6.2,3.6.3).

注意短语"初始化""完全像非本地对象".希望这能解释为什么你不能这样做.

实际上,静态成员更像是通过访问的全局对象Myclass::iCount.因此,您需要在全局范围(与定义类相同的范围)初始化它们,如下所示:

class Myclass{

    static int iCount;
} ;
int Myclass::iCount=1;

int main(){
  /*** use Myclass::iCount here ****/
}
Run Code Online (Sandbox Code Playgroud)

类似主题:

静态成员变量如何影响对象大小?