繁体   English   中英

为什么static全局变量初始化为零,而class中的static成员变量没有初始化?

[英]Why static global variables initialized to zero, but static member variable in class not initialized?

static int counter // will initalized to 0

但是如果我在 class 中创建该变量,它不会被初始化,我必须在 class 之外初始化它

class Test {
static int counter;  // not initialized
};
...
Test::counter = 0; 

我知道 static 变量存储在 memory 的 BSS 段中,默认初始化为 0,那么为什么我在 class 中创建 static 时没有初始化?

为什么static全局变量初始化为零,而class中的static成员变量没有初始化?

因为class内部的非内联 static 数据成员的声明不是定义

这可以从static 数据成员文档中看出:

static 关键字仅用于 static 成员的声明,在 class 定义中,但不用于该 static 成员的定义。 class 主体中的声明不是定义,可以将成员声明为不完整类型(void 除外),包括声明成员的类型:


还有 class 定义Test::counter = 0; 是不正确的。 它应该改为int Test::counter = 0;

这个问题是基于一个错误的前提。 Static 成员变量进行零初始化。 以下代码将执行counter的预期零初始化。

class Test {
static int counter;  // declaration, not defined yet
};

int Test::counter;   // definition with zero-initialization

需要的不是初始化,而是定义。 没有定义,编译器就没有地方可以执行初始化,零或其他。

另请参阅Undefined reference to a static memberDefining static members in C++了解更多背景信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM