用g ++编译C ++ 11

我正在尝试将我的C ++编译器更新到C ++ 11。 我已经search了一下,我得出结论,我必须使用标志-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}; ... } 

This file requires compiler and library support for the upcoming ISO C++ standard, C++0x. This support is currently experimental, and must be enabled with the -std=c++0x or -std=gnu++0x compiler options.

标志(或编译器选项)只是传递给编译器可执行文件的普通命令行参数。

假设你从命令行(terminal)调用g ++:

$ g++ -std=c++11 your_file.cpp -o your_program

要么

$ g++ -std=c++0x your_file.cpp -o your_program

如果上述不起作用。

你可以通过命令来检查你的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 

然后select2作为select(我的机器已经指向g++ 4.7,所以*)

一旦你切换编译器,然后再次运行g++ --version检查切换是否正确发生。

现在编译你的程序

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

你的Ubuntu有绝对的g ++版本。 要使用的标志是-std=c++0x

如果要保留GNU编译器扩展,请使用-std = gnu ++ 0x而不是-std = c ++ 0x。 以下是手册页中的一段引文:

编译器可以接受几个基本标准,如c89或c ++ 98,以及这些标准的GNU方言,如gnu89或gnu ++ 98。 通过指定基本标准,编译器将接受遵循该标准的所有程序,以及那些使用GNU扩展的程序。 例如,-std = c89closures了与ISO C90不兼容的GCC的某些function,例如“asm”和“typeof”关键字,但不包括ISO C90中没有含义的其他GNU扩展,例如省略一个“?:”expression的中期。 另一方面,通过指定标准的GNU方言,即使这些function改变了基本标准的含义,并且一些严格符合的程序可能被拒绝,编译器支持的所有特征也被启用。 这个特定的标准被用来标识哪些特征是给定该版本标准的GNU扩展。 例如std = gnu89 -pedantic会警告C ++风格//注释,而-std = gnu99 -pedantic不会。