C ++数组初始化程序警告

时间:2014-06-24 19:01:39

标签: c++ arrays warnings initializer

我在类中声明并初始化了一个常量char数组:

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的前代码是什么。< / p>

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

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

> g++ -o test main.cpp

2 个答案:

答案 0 :(得分:2)

您需要使用-std=c++11进行编译(适用于gccclang)。如果不这样做,则检查程序与旧的C ++ 98标准,以确保与旧编译器的兼容性。

因此,它允许您在没有标志的情况下使用C ++ 11功能,但会警告您,以免您在意外时执行此操作。

进一步说明:

您的代码编译得很好,因为它是合法代码,编译器可以编译它。编译器省略了一个警告,让你意识到你使用C ++ 11功能的事实,因为许多人(比如我的大学,遗憾地)仍然使用过时的编译器,如gcc4.6,但没有完整的C ++ 11支持。这意味着这些人可能无法编译您可能关心的代码(例如,如果您的教授需要编译您的作业)。

使用-std=c++11标志告诉编译器&#34;这是一个C ++ 11程序,用于编译符合C ++ 11的编译器&#34;。因此,警告变得多余。

答案 1 :(得分:2)

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