这是一个常见误解。先给结论:
CentOS 本身并不是“不支持 C++ 新特性”,而是它默认提供的编译器版本较旧,导致默认环境下用不了新标准。
下面分点说明。
CentOS(以及 RHEL)是企业级稳定发行版,核心目标是:
因此它不会频繁升级核心工具链,比如:
| CentOS 版本 | 默认 gcc 版本 | 支持 C++ 标准 |
|---|---|---|
| CentOS 7 | gcc 4.8.5 | C++11(部分) |
| CentCentOS 8 | gcc 8.x | C++14 / C++17 |
| CentOS Stream 9 | gcc 11.x | C++17 / 部分 C++20 |
而很多“新特性”(C++17 / C++20 / C++23)需要 gcc 7+ / 9+ / 11+。
例如:
// C++17
if constexpr (sizeof(int) == 4) { }
在 CentOS 7 默认 gcc 下会报错,但不是 CentOS 不支持,而是:
gcc --version
# gcc 4.8.5
yum install centos-release-scl
yum install devtoolset-11
scl enable devtoolset-11 bash
然后:
g++ --version
# gcc 11.x
支持:
wget https://ftp.gnu.org/gnu/gcc/gcc-13.2.0/gcc-13.2.0.tar.gz
# 编译安装
yum install clang
clang++ -std=c++20 main.cpp
因为:
所以企业系统采用 并存方案(SCL / 容器 / 容器化编译)
✅ 开发用新编译器,运行用稳定系统
例如:
docker run -v $PWD:/src gcc:13 bash -c "g++ -std=c++20 /src/main.cpp"
CentOS 不是不支持 C++ 新特性,而是默认“为了稳定”给你一个老编译器。
如果你愿意,我也可以: