将静态成员数组初始化为零

Initialize static member array to zero

本文关键字:初始化 数组 静态成员      更新时间:2023-10-16

通过此处的文档 http://www.open-std.org/Jtc1/sc22/wg21/docs/papers/2011/n3242.pdf

"具有静态存储持续时间 (3.7.1) 或线程存储的变量 持续时间 (3.7.2) 应在任何其他之前初始化 (8.5) 为零 初始化发生"

如果我拥有所有内容,即类声明和main()在单个文件(必须)中,我应该能够省略初始化。但是,如果我省略,我会在构建过程中收到"未定义的引用"错误。

#include <iostream>
using namespace std;
class foo
{
    public:
        static int array[2];
};
int foo::array[2] = {0}; //I should be able to omit this line
int main()
{
    cout << "foo::array[0] = " << foo::array[0] << endl;
    return 0;
}

PS:没有C++11

我认为你误读了标准。您可以简单地删除= {0}部分,因为编译器会自动用零初始化它。

你不能省略整行,否则你只是声明数组,但你永远不会在任何地方定义它 - 这就是导致问题的原因。

对于类的静态数据成员,必须在实现文件中强制提供定义,因为:

无论创建多少对象,静态数据都具有单个存储,该存储必须在一个位置定义。编译器不会为您分配存储。如果声明了静态数据成员但未定义静态数据成员,则链接器将报告错误。