Ron*_*nis 349 c++ flags g++ c++11
我正在尝试将我的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};
...
}
Run Code Online (Sandbox Code Playgroud)
此文件需要编译器和库支持即将推出的ISO C++标准C++ 0x.此支持目前是实验性的,必须使用-std = c ++ 0x或-std = gnu ++ 0x编译器选项启用.
Osk*_* N. 507
标志(或编译器选项)只是传递给编译器可执行文件的普通命令行参数.
假设您从命令行(终端)调用g ++:
$ g++ -std=c++11 your_file.cpp -o your_program
要么
$ g++ -std=c++0x your_file.cpp -o your_program
如果以上不起作用.
小智 43
您可以g++通过命令检查:
which g++
g++ --version
Run Code Online (Sandbox Code Playgroud)
这将告诉你当前它指向哪个编译器.
要切换到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
Run Code Online (Sandbox Code Playgroud)
然后选择2作为选择(我的机器已经指向g++4.7,所以*)
一旦你切换编译器然后再次运行g++ --version检查切换是否正确发生.
现在编译您的程序
g++ -std=c++11 your_file.cpp -o main
Run Code Online (Sandbox Code Playgroud)
Mic*_*ade 13
你的ubuntu肯定有一个足够新的g ++版本.要使用的标志是-std=c++0x.
小智 10
如果要保留GNU编译器扩展,请使用-std = gnu ++ 0x而不是-std = c ++ 0x.以下是手册页的引用:
编译器可以接受几个基本标准,例如c89或c ++ 98,以及这些标准的GNU方言,例如gnu89或gnu ++ 98.通过指定基本标准,编译器将接受遵循该标准的所有程序以及使用不与其相矛盾的GNU扩展的程序.例如,-std = c89关闭与ISO C90不兼容的GCC的某些功能,例如"asm"和"typeof"关键字,而不是其他在ISO C90中没有意义的GNU扩展,例如省略中间的"?:"表达式.另一方面,通过指定标准的GNU方言,即使这些功能改变了基本标准的含义并且某些严格符合的程序可能被拒绝,也会启用编译器支持的所有功能.特定标准由-pedantic使用,以确定哪些特征是GNU扩展,并给出了该标准的版本.例如-std = gnu89 -pedantic会警告C++样式//注释,而-std = gnu99 -pedantic则不会.