You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++20下constexpr修饰std::string与std::vector编译错误排查

问题解决说明

标准层面的约束

C++20引入的constexpr std::vector和constexpr std::string特性,存在明确的使用限制:常量求值过程中分配的动态内存,必须在常量求值阶段完全释放,不允许留存到运行时。
你直接将std::string、std::vector定义为constexpr变量的写法,要求容器分配的内存从编译期持续到程序运行阶段,违反了上述标准约束,因此会触发编译错误。
而std::array属于固定大小的栈上容器,无需动态内存分配,不受该规则限制,所以可以直接定义为constexpr变量。

合法的constexpr容器用法示例如下,仅允许在编译期函数内部使用,求值结束后容器内存即被释放:

constexpr int get_vector_value() {
    std::vector<int> cv{1, 2, 3};
    cv.push_back(4);
    return cv.at(3);
}
// 编译期求值得到常量
constexpr int res = get_vector_value(); // 可正常编译

VS环境配置检查

VS2019 16.11.4确实支持该特性,但需要手动开启C++20标准支持,操作步骤如下:

  • 打开项目属性页,依次进入「配置属性」→「C/C++」→「语言」分类
  • 将「C++ 语言标准」选项设置为「ISO C20 标准(/std:c20)」或更高版本
  • 保存配置后重新编译即可

内容的提问来源于stack exchange,提问作者Vlad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:06:03