首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++阵列初始化器警告

C++阵列初始化器警告
EN

Stack Overflow用户
提问于 2014-06-24 19:01:38
回答 2查看 898关注 0票数 3

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

代码语言:javascript
运行
复制
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“友好”。

也是根据请求,我的编译器命令:

代码语言:javascript
运行
复制
> g++ -o test main.cpp
EN

回答 2

Stack Overflow用户

发布于 2014-06-24 19:08:25

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

因此,它允许您在不带标志的情况下使用C++11特性,但同时警告您,这样您就不会意外地使用它。

进一步解释:

您的代码编译良好,因为它是合法代码,编译器可以编译它。编译器省略了一个警告,让您意识到您使用了C++11特性,因为许多人(比如我的大学,不幸的是)仍然使用过时的编译器,如gcc4.6,还没有完全的C++11支持。这意味着这些人可能无法编译您可能关心的代码(例如,您的教授需要编译您的作业)。

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

票数 2
EN

Stack Overflow用户

发布于 2014-06-24 19:09:30

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24394319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档