考虑:
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: a member of type "const char *const [12]" cannot have an in-class initializer
这是错误还是我做错了什么?
根据C++标准
If a non-volatile const static data member is of integral or
enumeration type, its declaration in the class definition can specify
a brace-or-equal-initializer in which every initializer-clause that is
an assignmentexpression is a constant expression
所以你的代码不满足 C++ 标准。
另一方面
A static data member of literal type can be declared in the class
definition with the constexpr specifier; if so, its declaration shall
specify a brace-or-equal-initializer in which every initializer-clause
that is an assignment-expression is a constant expression
所以为了得到你应该写的有效代码
static constexpr char* const NOTE_NAMES[12] =
{ "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };