问题描述
我对部分旧的C ++代码有疑问。 在myClass类的头文件中,有一个静态数组成员,定义如下:
static const int myArray[];
在.cpp文件中,其初始化如下:
const int myClass::myArray[]={2,4,5,7,9,11,13};
可以吗?
我不在乎现在是否不好,我只是想知道它是否会给我带来奇怪的问题。
解决方法
可以吗?
要重复@bolovs评论:
是的,完全可以
我不确定OP特别担心什么。 因此,我列出了OP可能看到的可疑问题。
1。 .h
中的声明与.cpp
中的定义
在C ++ 17中发明static
成员变量之前,这是在C ++中定义static inline
成员变量的通常(唯一)方法。
由于标头可能包含在多个翻译单元(也称为.cpp
文件)中,因此标头中的定义将由编译器多次处理,因此违反了One Definition Rule通常会导致链接器错误。
2。 .h
对于声明,不需要数组的实际大小。
请注意:static
成员变量不会增加类的大小。
因此,当将该类用于其他翻译单元时,数组的未知大小不会妨碍编译器确定该类的正确大小。
3。 .cpp
这是一个继承自C的古老功能:可以定义数组,但可以从初始值设定项中确定大小。
这对于消除代码中的冗余很有用。
(否则,可能会引起诸如const char text[10] = "Hello world.";
之类的烦人的错误,因为作者无法正确地估计"Hello world."
需要13个元素,但不需要10个元素。)