VSC++数组显式初始化式
VSC++ explicit initializer for arrays
我已经将一个c++项目从MinGW编译器移植到Visual Studio c++。我有一个类的私有属性:
bool hisStateTable[HIS_STATES][HIS_STATES] =
{ // the rows and cols represent the state for His: OFF, SAFE, Boot Boot Maintenance, Low Voltage Engineering, High Voltage Standby, Test Science, Normal Science, Burst Science
{ false, false, true, false, false, false, false, false, false }, // OFF state table
{ false, true, true, false, true, false, false, false, false }, // Safe state table
{ false, false, false, true, true, false, false, false, false }, // Boot state table
{ false, false, false, true, true, false, false, false, false }, // Boot_Maint state table
{ false, false, false, false, true, true, false, false, false }, // LV_Engin state table
{ false, false, false, false, true, true, true, true, false }, // HW_Sdby state table
{ false, false, false, false, false, true, false, false, false }, // Test_Sc state table
{ false, false, false, false, false, true, false, true, true }, // Normal_Sc state table
{ false, false, false, false, false, false, false, true, false } // Burst_Sc state table
};
但是当我编译它时出现以下错误:
cannot specify explicit initializer for arrays
显示的语法是有效的c++。它被称为list-initialization,在n3797 S8.5.4中有描述。它可以在许多不同的情况下使用。
我找不到具体提到哪些类型的数组可以用这种方式初始化。它当然可以用于在文件范围内声明的数组和在函数中声明的局部数组。也许更熟悉标准的人可以指出标准在哪里处理非静态成员数组的list初始化。类成员的初始化在S9.2中提到。也许在不同的c++版本之间,细节发生了变化。
假设(至少对于您正在使用的编译器)这是不允许的,您几乎没有选择,只能在构造函数中初始化数组。您可以创建一个局部变量并在构造函数中对其进行记忆重载,或者您也可以在文件范围内声明一个静态数组。
static bool hisStateTable_static[HIS_STATES][HIS_STATES] = {
// omitted
};
SomeClass::SomeClass(void) {
assert(sizeof(hisStateTable_static) == sizeof(_state_table));
memcpy(_state_table, hisStateTable_static, sizeof(_state_table));
}
这是最简单的代码,依赖最少,但不一定是最好的方法。
请注意,编译器会检查你的初始化项是否太多,但如果你的初始化项太少,它会提供额外的零。
相关文章:
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 在函数内部的声明中初始化数组,并在外部使用它
- 为什么用结构初始化数组需要指定结构名称
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- C++使用另一个数组和新值初始化数组
- 初始化数组、"memset"或" {//value} "的最佳方法是什么?
- 在 constexpr 构造函数中初始化数组是否合法?
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 在构造函数中初始化数组
- 是否可以使用函数返回的值初始化数组
- 使用宏使用额外元素初始化数组
- 在循环中显示不同值的初始化数组
- 如何在macOS中的旧扩展clang和gcc编译器中初始化数组和向量
- 使用可变模板列表初始化数组,并放置new
- 使用函数从 Visual Studio 2017 中的 main 创建和初始化数组
- 使用 c++ 中的函数初始化数组
- 这是使用构造函数初始化数组对象的最佳方法吗?
- C++ 使用变量而不是常量表达式初始化数组
- 在初始化列表中初始化数组的更好方法
- 在可变参数模板类中初始化数组