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
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52