
VS里怎么把项目设成C++20标准
直接改项目属性就行,不用动全局设置,也不用装额外工具链(只要VS 2019 16.10+ 或 VS 2022 默认就支持 C++20)。关键不是“能不能”,而是“改对地方”——很多人在「平台工具集」或「C/C++ 常规」里瞎找,其实它藏在语言子项里。
- 右键项目 → 属性 → 左侧展开「配置属性」→「C/C++」→「语言」
- 找到
C++ Language Standard这一项,下拉选ISO C++20 Standard (/std:c++20) - 确认「配置」是
所有配置(Debug/Release)和「平台」是所有平台(x64/Win32),否则可能只生效一半 - 改完点「确定」,必须重新生成项目,仅重建或编译不会触发标准重解析
/std:c++20 和 /std:c++latest 有啥区别
/std:c++20 是锁定在 ISO C++20 正式标准,而 /std:c++latest 是“最新实验性支持”,会随 VS 更新悄悄加新特性(比如某天突然支持 std::print),但也会悄悄引入不稳定的 ABI 或未完成的实现。
- 团队协作或发版项目,无条件选
/std:c++20;/std:c++latest只适合个人尝鲜或 PoC - VS 2022 17.5+ 中
/std:c++latest已默认启用部分 C++23 特性,但链接时可能报LNK2001: unresolved external symbol—— 因为库没同步更新 - 用
/std:c++20后,像std::span、std::format、concept这些能用,但std::mdspan或std::print依然不可用(它们是 C++23 的)
改了标准却报“feature not available”?检查这三处
不是所有 C++20 特性都能开箱即用,VS 对标准的支持是分层的:语法解析、语义检查、标准库实现、运行时支持。常见卡点在这几个地方:
-
std::format需要 Windows 10 SDK ≥ 10.0.20348.0,旧 SDK 下即使开了/std:c++20也会报error C2039: 'format' is not a member of 'std' - 使用
concept时,如果头文件没显式包含<concepts></concepts>,会提示error C3615: constexpr function 'xxx' cannot be used in a constant expression(而不是说 concept 不认识) - 启用了
/permissive-(严格模式)时,某些 C++20 扩展语法(如非类型模板参数支持字符串字面量)会被拦住,得关掉或换用/Zc:preprocessor等配套开关
MSVC 的 C++20 支持度到底到哪了
别信官网“已支持 C++20”的大标题。实际要看 MSVC 语言一致性页面,里面标 ✅ 的才是真可用。比如:
立即学习“C++免费学习笔记(深入)”;
-
designated initializers(指定初始化器)在 VS 2022 17.4+ 才完整支持,之前版本只支持 POD 类型 -
consteval在 17.0 就有了,但和constexpr混用时,错误信息极不友好,常报error C7626: anonymous union cannot be declared in this scope(其实是 consteval 函数里用了匿名 union) - 标准库方面,
std::ranges::sort可用,但std::ranges::iota在 VS 2022 17.5 前压根没实现,头文件里找不到声明
最稳妥的做法:写完一个 C++20 特性,立刻在空函数里最小化验证,别堆到联调阶段才发现编译器不认。










