考虑:
class Note
{
public:
// ...
private:
static const char* const NOTE_NAMES[12] =
{ "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
}
虽然它编译得很好, IntelliSense给了我一个错误:
IntelliSense:“const char * const [12]”类型的成员不能拥有类内初始值设定项
这是一个错误还是我做错了什么?
答案 0 :(得分:1)
根据C ++标准
如果非易失性const静态数据成员是整数或 枚举类型,它在类定义中的声明可以指定 一个括号或等于初始化器,其中每个初始化器子句都是 assignmentexpression是一个常量表达式
所以你的代码不符合C ++标准。
另一方面
可以在类中声明 literal 类型的静态数据成员 constexpr说明符的定义;如果是的话,其声明应 指定一个brace-or-equal-initializer,其中包含每个initializer子句 这是一个赋值表达式是一个常量表达式
所以要获得有效的代码,你应该写
static constexpr char* const NOTE_NAMES[12] =
{ "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };