C++ C++;数组初始值设定项警告

C++ C++;数组初始值设定项警告,c++,arrays,warnings,initializer,C++,Arrays,Warnings,Initializer,我已经声明并初始化了类中的常量字符数组: class grid { const char test[11] = {'s', 'e', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; 我的代码正常工作,但我不断收到编译器警告: 非静态数据成员初始值设定项仅适用于C++11 及 扩展初始值设定项列表仅适用于C++11 我知道这不是一个问题,因为我是按照C++11标准编译的,但我很好奇C++11之前的代码是什么 我希望有人能给我一些见解,并建议我可

我已经声明并初始化了类中的常量字符数组:

class grid {
    const char test[11] = {'s', 'e', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
我的代码正常工作,但我不断收到编译器警告:

非静态数据成员初始值设定项仅适用于C++11

扩展初始值设定项列表仅适用于C++11

我知道这不是一个问题,因为我是按照C++11标准编译的,但我很好奇C++11之前的代码是什么

我希望有人能给我一些见解,并建议我可以做些什么,使这段代码C++98“友好”

根据要求,我的编译器命令:

> g++ -o test main.cpp

您需要使用
-std=c++11
(对于
gcc
clang
)进行编译。如果您不这样做,您的程序将与旧的C++98标准进行比较,以确保与旧的编译器兼容

因此,它允许您在不带标志的情况下使用C++11功能,但会发出警告,以免发生意外

进一步解释:

您的代码可以很好地编译,因为它是合法代码,编译器可以编译它。编译器省略了一个警告,让您知道您使用了C++11功能,因为许多人(很遗憾,像我所在的大学)仍然使用过时的编译器,如gcc4.6,它们还没有完全支持C++11。这意味着这些人可能无法编译您的代码,而您可能会关心这些代码(例如,如果您的教授需要编译您的作业)


使用
-std=c++11
标志,您可以告诉编译器“这是一个c++11程序,打算使用符合c++11的编译器进行编译”。因此,警告变得多余。

要使其与C++98兼容,您需要在类声明之外初始化非静态类常量。

是否将
-std=C++11
添加到编译器命令行?警告中[默认情况下]已启用,以使其成为您所称的C++98“友好”类,不要在类声明中初始化类数据成员;改为在类构造函数中执行此操作。表示默认情况下已启用警告,它与
-std=c++11
无关。如果启用了C++11模式,则不应出现此警告。C++03仅允许对常量整型静态数据成员进行类内初始化。您正在使用一个名为非静态数据成员初始值设定项的C++11功能。但是,您不能在C++98的构造函数中初始化数组。除非调用assigning to elements initializing。如问题中所述,我知道用c++11编译它可以解决这个问题。“我更感兴趣的是它是如何发生的以及为什么发生的。”里斯编辑,希望这能有所帮助。