3

当我执行

g++ main.cpp 

我得到输出

main.cpp:9:17: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:10:15: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:11:16: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:12:14: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
main.cpp:13:13: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]

现在如果我跑

g++ -std=c++11 main.cpp

警告消失了,但我不想明确指定已启用的内容。我犹豫要不要创建一个简单的 bash 别名,因为如果我没记错的话,gcc 已经是某种别名了。无论如何这样做是否安全,或者是否有正确的方法可以在配置文件或其他内容中解决此问题?我正在使用默认存储库的 Ubuntu 12.10 x64 上运行。

4

6 回答 6

3

“我不想明确指定已经启用的东西”——实际上这几乎可以肯定是最低能量消耗的方法。将有许多其他可能性,从管道输出grep -v到重新编码和重新编译编译器工具链,但它们很可能都比仅将标志添加到命令行更难。

而且,如果您担心额外的字符和可能的别名冲突,您可以随时调用您的别名g11或类似名称。那么你只需要记住使用正确的名称,但是任何有脊柱的生物体都应该足够先进来处理它:-)

于 2012-12-02T21:55:54.343 回答
2

GCC 系列编译器(gcc、g++ 等)接受-w禁用所有警告的开关 -但您不想这样做。

于 2012-12-02T21:51:10.283 回答
1

做别名确实是一种安全的方法。出于同样的原因,我将以下内容添加到了我的 .bashrc 文件中,并且它运行良好。

alias g++='g++ -std=c++11'
于 2013-01-17T22:21:01.783 回答
0

这是 GCC 特有的,你必须明确地告诉它。如果您使用的是某些 IDE,只需转到项目选项并在那里指定 -std=c++11 即可。否则最好编写符合 C++03 的代码。

于 2013-01-07T08:07:44.880 回答
0

如果您编写代码,那么您可能会编写代码(为什么不,我们都期待 C++11),那么您现在需要添加标志。您可以在 make 文件中执行此操作,也可以在两行中执行类似的操作/usr/local/bin/g++

#!/bin/bash
/usr/bin/g++ -std=c++11 "$@"

通过在路径中较早,它将“赢得”默认g++二进制文件并为您调用它。

方便,但您的代码现在可能是不可移植的。一个权衡。

于 2012-12-02T21:55:42.157 回答
0

-std=c+11在您选择的构建系统或 IDE 中指定。您可以在此处了解各种构建系统。

于 2012-12-03T01:14:31.813 回答