gpt4 book ai didi

c++ - 为什么静态全局变量初始化为零,但类中的静态成员变量没有初始化?

转载 作者:行者123 更新时间:2023-12-03 08:00:10 27 4
gpt4 key购买 nike

static int counter//将初始化为 0

但是如果我在类内部创建该变量,它不会被初始化,我必须在类外部初始化它

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

我知道静态变量存储在内存中的BSS段中,并且默认初始化为0,那么为什么当我在类中创建静态变量时却没有初始化呢?

最佳答案

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

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++了解更多背景信息。

关于c++ - 为什么静态全局变量初始化为零,但类中的静态成员变量没有初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74587411/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com