c++ - 如何用常量成员值初始化数组成员?
问题描述
我想使用一个常量值来初始化成员数组。
--Test.h--
class Test {
public:
static int ARRAY_SIZE;
...
..
private
int m_array[ARRAY_SIZE];
}
--Test.cpp--
int Test::ARRAY_SIZE = 20;
但是,它显示这样的错误。'数组边界在']'之前不是整数常量
所以,我想知道有一个解决方案。
我想要固定大小的数组。而且我不想要任何依赖项(例如用于常量值的附加文件)
对此的最佳做法是什么?
解决方案
错误是正确的。您的数组绑定是一个变量,而不是一个常量。
static int ARRAY_SIZE;
上面声明了一个变量。下面声明了一个常量。
static const int ARRAY_SIZE;
对于数组的大小,除了简单地声明之外,还有一个额外的要求const
:大小必须用常量表达式初始化,也称为编译时常量(编译器已知的常量值)。如果翻译单元看到 的声明ARRAY_SIZE
但没有看到它的值,则它不算作编译时常量。为了解决这个问题,初始化需要在头文件中。结合初始化和声明:
static const int ARRAY_SIZE = 20;
自 C++11 以来,有一种奇特的方式来表达您有一个编译时常量,您可能希望养成在适用时使用它的习惯:
static constexpr int ARRAY_SIZE = 20;
推荐阅读
- typescript - Typescript - 如何查找具有属性的数组,然后在该数组中添加一个数组
- discord - 当一个或多个值相同时按两个属性对级别数据进行排序
- python - main.py 无法从模块中读取函数
- mongodb - 可以通过本地主机访问 Mongo 的 Pod,但不能访问服务名称
- azure - 是否可以监控 Azure 集成运行时?
- vb.net - 哪个 WebView2 事件/函数可用于替换 ScriptNotify Webview 事件?
- clickhouse - clickhouse 中的“宏”是什么,clickhouse 中的“宏”有什么用?
- php - 为什么这是打印0?
- typescript - 如何将 Unicode 字符转换为十六进制格式的 Unicode 代码点?
- excel-formula - 对多个索引匹配公式求和