0

考虑:

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]”类型的成员不能具有类内初始化程序

这是一个错误还是我做错了什么?

4

1 回答 1

1

根据 C++ 标准

如果非易失性 const 静态数据成员是整数或枚举类型,则其在类定义中的声明可以指定一个大括号或等式初始化器,其中作为赋值表达式的每个初始化器子句都是一个常量表达式

所以你的代码不满足 C++ 标准。

另一方面

可以使用constexpr 说明符在类定义中声明文字类型的静态数据成员;如果是这样,它的声明应指定一个大括号或等式初始化器,其中作为赋值表达式的每个初始化器子句都是一个常量表达式

因此,要获得有效的代码,您应该编写

static constexpr char* const NOTE_NAMES[12] =
        { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
于 2014-06-18T07:02:32.187 回答