繁体   English   中英

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

[英]Initialize static member array to zero

请参阅此处的文件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}部分,因为编译器将使用零自动初始化它。

不能忽略整行,因为否则你只是声明数组,但你从来没有在任何地方定义它 - 这就是造成问题的原因。

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

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

暂无
暂无

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

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