.cpp文件中初始化的静态const数组

问题描述

我对部分旧的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个元素。)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...