智能感知:类型 "const char *const []" 的成员不能具有类内初始值设定项

IntelliSense: a member of type "const char *const []" cannot have an in-class initializer

本文关键字:const 成员 char 类型 感知 智能 不能      更新时间:2023-10-16

考虑:

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]"的成员不能具有类内初始值设定项

这是bug还是我做错了什么?

根据C++标准

如果非易失性常量静态数据成员是整数或枚举类型,其在类定义中的声明可以指定大括号或相等的初始值设定项,其中赋值表达式是一个常量表达式

因此,您的代码不满足C++标准。

另一方面

可以在类中声明literal类型的静态数据成员带有constexpr说明符的定义;如果是,其声明应指定一个大括号或相等的初始值设定项,其中的每个初始值设定值子句这是一个赋值表达式,是一个常量表达式

所以为了获得有效的代码,你应该写

static constexpr char* const NOTE_NAMES[12] =
        { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };