C++怎么改语言标准 C++在VS中设置C++20标准【配置】

1次阅读

C++怎么改语言标准 C++在VS中设置C++20标准【配置】

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::spanstd::formatconcept 这些能用,但 std::mdspanstd::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 特性,立刻在空函数里最小化验证,别到联调阶段才发现编译器不认。

text=ZqhQzanResources