我正在尝试将我的C ++编译器更新为C ++ 11。
我已经搜索了一下,我得出的结论是我必须使用标志-std=c++0x
或-std=gnu++0x
,但我不知道很多关于标志的事情。谁能帮我? (我正在使用Ubuntu 12.04。)
当我尝试使用C ++ 11中包含的库(即数组)时,我从编译器得到的错误:
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
此文件需要编译器和库支持即将推出的ISO C ++标准C ++ 0x。此支持目前是实验性的,必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用。
答案 0 :(得分:471)
Flags(或编译器选项)只是传递给编译器可执行文件的普通命令行参数。
假设您从命令行(终端)调用g ++:
$ g++ -std=c++11 your_file.cpp -o your_program
或
$ g++ -std=c++0x your_file.cpp -o your_program
如果上述方法不起作用。
答案 1 :(得分:41)
您可以通过命令检查g++
:
which g++
g++ --version
这将告诉你当前它指向哪个编译器。
要切换到g++
4.7(假设您已在计算机中安装),请运行:
sudo update-alternatives --config gcc
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/gcc-4.6 60 auto mode
1 /usr/bin/gcc-4.6 60 manual mode
* 2 /usr/bin/gcc-4.7 40 manual mode
然后选择2
作为选择(我的机器已经指向g++
4.7,所以*)
切换编译器后,再次运行g++ --version
以检查切换是否正确发生。
现在使用
编译您的程序g++ -std=c++11 your_file.cpp -o main
答案 2 :(得分:12)
你的ubuntu肯定有一个足够新版的g ++。要使用的标志是-std=c++0x
。
答案 3 :(得分:10)
如果要保留GNU编译器扩展,请使用-std = gnu ++ 0x而不是-std = c ++ 0x。以下是手册页中的引用:
编译器可以接受几个基本标准,例如c89或c ++ 98, 和那些标准的GNU方言,例如gnu89或gnu ++ 98。通过 指定基本标准,编译器将接受所有程序 遵循该标准和那些不使用GNU扩展的标准 与之相矛盾。例如,-std = c89会关闭GCC的某些功能 与ISO C90不兼容的,例如“asm”和“typeof” 关键字,但没有其他没有意义的GNU扩展 ISO C90,例如省略“?:”表达式的中间项。在 另一方面,通过指定标准的GNU方言,所有功能 即使这些功能发生了变化,也会启用编译器支持 基本标准的含义和一些严格符合的程序可能 被拒绝特定标准由-pedantic用于识别 鉴于该标准的版本,哪些功能是GNU扩展。 例如-std = gnu89 -pedantic会警告C ++风格// 注释,而-std = gnu99 -pedantic则不会。
答案 4 :(得分:4)