使用clang++12/13、g++10.3.0编译是否还需指定-std=c++11参数?
问题解答
1. 关于你提到的编译器默认标准的说明
你使用的三款编译器的默认C标准**都高于C11**,因此原生支持所有C++11特性,无需额外指定-std=c++11参数即可编译相关代码:
- g++ 5.x及以上版本默认就已经支持C11,你使用的g 10.3.0默认采用带GNU扩展的C++14(
gnu++14)作为编译标准 - clang++ 12、13的默认编译标准和同版本g对齐,同样为带GNU扩展的C14(
gnu++14)
2. 查询编译器默认C++标准的方法
方法1:通过__cplusplus宏验证
你可以通过编译器预定义的__cplusplus宏快速确认实际使用的C++标准:
- 新建cpp文件
check_std.cpp,写入如下代码:
#include <iostream> int main() { std::cout << __cplusplus << std::endl; return 0; }
- 不加任何
-std参数直接编译运行,输出数值对应的标准如下:
- 199711L:C98/C03
- 201103L:C++11
- 201402L:C++14
- 201703L:C++17
- 202002L:C++20
方法2:通过编译器命令直接查询默认配置
- 对于g++,执行命令:
g++ -v --help 2>/dev/null | grep -A 10 "C++ dialect options",即可在输出中找到默认的-std配置 - 对于clang++,执行命令:
clang++ -v --help 2>/dev/null | grep -A 10 "C++ language options",即可查看默认标准配置
内容的提问来源于stack exchange,提问作者Namal
相关产品推荐
相关产品推荐

