1 GCC版本与C++标准的对应关系
C++到今年为止已经有了C++98、C++11、C++14、C++17、C++20,而C++23也于今年发布,而C++26也预计在2026年发布。目前在项目中一般是C++11作为标准,当然也有时会用到C++14和C++17的一些特性。
GCC是支持多种编程语言的编译套件,支持不同C++版本的编译,但是编译C++代码时需要找到正确的编译器,如果我们的项目中用的包含了C++14的部分特性,但是选择的GCC版本支持的最高版本是C++11,这个时候就会出现编译错误,或者在编译时不会出现编译错误,但是在运行时就会出现程序崩溃的问题。所以为了避免上述错误,弄清楚C++标准和编译器GCC版本之间的对应关系非常重要。
在GUN中GCC的这个页面详细介绍了GCC编译中对C++不同标准的支持,经过详细查看这个文档,我对C++标准和编译器GCC版本之间的对应关系进行了归纳,见下面这个表格
C++标准 | GCC版本 |
---|---|
C++98 | C++98是GCC 6.1之前版本的默认C++语言标准,使用-std=c++98启用,如果要启用C++98功能之外的GNU扩展,则指定-std=gnu++98 |
C++11 | GCC 4.8.1是C++11第一个功能完整的实现,使用-std=c++11启用,如果要启用C++98功能之外的GNU扩展,则指定-std=gnu++11。不过建议使用比GCC 4.8高的版本,建议使用GCC 6.1到GCC 10.0的版本,既支持C++11也支持C++14。 |
C++14 | C++11是GCC 6.1到GCC 10.0(包含)的默认C++语言标准,使用-std=c++14启用,如果要启用C++98功能之外的GNU扩展,则指定-std=gnu++14 |
C++17 | 从GCC 11开始将C++17作为默认的C++语言标准,使用-std=c++17启用,如果要启用C++98功能之外的GNU扩展,则指定-std=gnu++17。一些C++17的功能从GCC 5就可用,但是只是实验性的,并不稳定,一直到GCC 9,C++17的功能才稳定下来。 |
C++20 | C++20虽然已经发布3年了,但是GCC对C++20的支持还是处于实验性阶段,部分功能从GCC 8开始可用,使用-std=c++20启用功能(在GCC 9 以及更早版本则使用-std=c++2a),如果要启用C++20功能之外的GNU扩展,则需要添加-std=gnu20。 |
C++23 | C++23的部分功能从GCC 11开始可用,但是GCC对C++23的支持也还是处于实验性阶段,使用-std=c++2b启用功能,如果要启用C++23功能之外的GNU扩展,则需要添加-std=gnu2b |
C++26 | GCC 对C++26标准的下一修订版提供实验性支持,预计将于 2026 年发布。 |
上表对C++标准和编译器GCC版本之间的对应关系进行了详细的梳理总结,对于当前项目中广泛使用的C++11标准代码的编译,建议使用GCC 10,既支持C++11也同时支持C++14,这和Visual Studio 2019的默认支持到C++14一样,如果项目跨平台且能够在Windows上在Visual Studio 2019上正确编译且运行,那么在Linux系统上使用GCC 10也可以正确编译和运行。
参考
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – GCC版本与C++标准之间的对应关系
原文链接:https://www.stubbornhuang.com/2776/
发布于:2023年09月01日 11:40:07
修改于:2023年09月01日 11:40:07
当前分类随机文章推荐
- C++11 - 快速学会正则表达式 阅读1650次,点赞2次
- C++11 - 使用std::thread在类内部以成员函数作为多线程函数执行异步操作 阅读3180次,点赞0次
- C++ - 使用Spout2将视频流发送到OBS 阅读227次,点赞0次
- C++ - 格式化json字符串,方便展示json字符串的层次结构 阅读3889次,点赞0次
- C++ - 只有在Debug模式下才使用std::cout输出调试日志,Release发布版本不输出调试日志 阅读5073次,点赞0次
- C++ – 字节数组byte[]或者unsigned char[]与short的相互转换 阅读1706次,点赞0次
- C++ - 拷贝构造函数与拷贝构造函数调用时机 阅读563次,点赞0次
- C++11 - 委托机制的实现TinyDelegate 阅读1722次,点赞0次
- C++ - 获取std::vector中的最小值、最大值以及对应的索引 阅读489次,点赞0次
- C++11 - 使用std::thread::join()/std::thread::detach()方法需要注意的点 阅读3531次,点赞0次
全站随机文章推荐
- C++ - 判断两个字符串是否相等方法总结 阅读753次,点赞0次
- ThreeJS - three.moudle.js报Uncaught SyntaxError:Unexpected token ‘export‘错误 阅读2169次,点赞0次
- C++ - websocket++不依赖boost,基于独立Asio编译方法 阅读124次,点赞0次
- Blender - 更换默认的渲染背景环境贴图 阅读1172次,点赞0次
- Python - 使用Opencv-Python库获取本机摄像头视频并保存为视频文件 阅读2960次,点赞0次
- 计算机图形学 - PBR纹理中不同贴图的作用和意义 阅读1850次,点赞1次
- Python - 使用letter box方法缩放图片,防止图片缩放时失真 阅读397次,点赞0次
- 资源分享 - Essential Math for AI - Next-Level Mathematics for Efficient and Successful AI Systems英文高清PDF下载 阅读400次,点赞0次
- WordPress - 网站性能优化,延迟加载css和js文件 阅读152次,点赞0次
- C++ - 只有在Debug模式下才使用std::cout输出调试日志,Release发布版本不输出调试日志 阅读5073次,点赞0次
评论
169