使用 g++ 编译 C++11
Compiling C++11 with g++
我正在尝试将我的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 编译器选项启用。
标志(或编译器选项(只不过是传递给编译器可执行文件的普通命令行参数。
假设您从命令行(终端(调用 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
然后选择2
作为选择(我的机器已经指向g++
4.7,所以 *(
切换编译器后,再次运行g++ --version
以检查切换是否正确发生。
现在编译你的程序
g++ -std=c++11 your_file.cpp -o main
您可以参考以下链接以了解哪个版本的编译器支持哪些功能。它提供了现代编译器中功能支持的详尽列表。似乎 GCC 非常严格地遵循该标准,并在任何其他编译器之前实现。
关于您的问题,您可以使用
- C++11 的
g++ source_file.cpp -o executable_name -std=c++11
- C++14 的
g++ source_file.cpp -o executable_name -std=c++14
- C++17 的
g++ source_file.cpp -o executable_name -std=c++17
-
g++ source_file.cpp -o executable_name -std=c++2a
对于 C++20,尚不支持 C++20 的所有功能。有关 GCC 中的功能支持列表,请参阅此链接。
列表变化非常快,如果您正在等待支持特定功能,请留意列表。
你的 Ubuntu 肯定有足够新版本的 g++
.要使用的标志是 -std=c++0x
。
如果你想保留 GNU 编译器扩展,请使用 -std=gnu++0x 而不是 -std=c++0x。以下是手册页中的一段话:
编译器可以接受多个基本标准,例如 c89 或 c++98, 以及这些标准的GNU方言,例如gnu89或gnu++98。由 指定基本标准,编译器将接受所有程序 遵循该标准以及那些使用不遵循该标准的 GNU 扩展 与之相矛盾。例如,-std=c89 关闭了 GCC 的某些功能。 与ISO C90不兼容,例如"asm"和"typeof" 关键字,但不包括其他在 ISO C90,例如省略"?:"表达式的中间项。在 另一方面,通过指定标准的GNU方言,所有功能 编译器支持已启用,即使这些功能更改了 基本标准和一些严格遵守程序的含义可能 被拒绝。 特定标准由 -pedantic 用于识别 哪些功能是给定该版本的标准的 GNU 扩展。 例如-std=gnu89 -pedantic会警告C++风格// 注释,而 -std=gnu99 -pedantic 不会。
对 ISO C++11.
使用-std=c++11
编译器标志有关C++编译器标志和选项的更多详细信息,请检查此项。
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 编译器不会使用 -std=c++11 编译智能指针
- 如何在 C++11 编译时构建具有递增值的整数成员的结构序列
- 无法用"-std=c++11"编译《你好世界》
- 为 freebsd 11 编译 gcc4.8.5 时出错: 错误: 未知类型名称 'choke'
- 如何使用Codelite 11.0.0编译静态库
- mingw:使用 -std=c++11 编译时找不到函数
- 如何在 ubuntu 12.10 中隐藏 g++ c++11 编译警告
- 用C++14编译器而不是C++11编译时,我的性能会提高吗
- Qmake 不使用 stdc++11 编译标志
- 为什么 std::stoi 和 std::array 不能使用 g++ c++11 编译
- Makefile C++11-编译为静态库
- 代码块中的C++11编译问题
- gcc在c++11编译中给出垃圾
- 如何告诉一个库是使用C++11编译的
- 使用makefile和c++11编译时出错
- c++ 11编译时组合两个字符串的最简单方法
- 用Visual Studio 11编译的可执行文件有什么特别之处,导致这些可执行文件不能在Windows XP上执行?
- c++ 11编译时调用printf的格式字符串字面值构造
- 如何在Xcode 8下用c++ 11编译一个项目