-std = c ++ 11在g ++命令行中的位置

时间:2016-04-01 12:25:44

标签: c++ c++11 g++

我很好奇标准选择开关(我的情况为-std=c++11)的位置是否与g ++命令行相关。原因如下:

g++   -ftest-coverage -fprofile-arcs -std=c++11 
      -ansi -fpermissive -finline-functions -Wno-long-long
      -fvisibility-inlines-hidden -m64 -Wall -Wextra 
      -g -o CMakeFiles/common.dir/cryptoclass.cpp.o 
      -c /home/work/common/cryptoclass.cpp

无法编译,而以下内容:

g++   -ftest-coverage -fprofile-arcs
      -ansi -fpermissive -finline-functions -Wno-long-long
      -fvisibility-inlines-hidden -m64 -Wall -Wextra 
      -g -o CMakeFiles/common.dir/cryptoclass.cpp.o 
      -std=c++11  -c /home/work/common/cryptoclass.cpp

编译。唯一的变化是-std=c++11被移动到开关的末尾。

g ++发出以下警告:

error: #error This file requires compiler and 
       library support for the ISO C++ 2011 standard. 
       This support is currently experimental, and must 
       be enabled with the -std=c++11 or -std=gnu++11 compiler options.

版本:

g++ (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4

1 个答案:

答案 0 :(得分:7)

根据documentation-ansi选项启用c ++ - 98 / c ++ - 03标准。

如果设置了多个标准选项,后一个选项将覆盖前者。同样适用于其他互斥选项,例如优化级别。