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

GCC编译正常MSVC报C3615:constexpr构造函数无法生成常量表达式

GCC可编译但MSVC 2022报错C3615的原因分析

你的代码不符合C++20标准,MSVC的报错是正确的,GCC属于放宽了标准检查的非标准行为。

问题根源

在C++20的常量表达式规则中,不能直接用字符串字面量初始化非const的字符数组成员。字符串字面量是const char[N]类型,而你的fixSources是char[6](非const),这种初始化方式在常量表达式语境下是标准不允许的。GCC对该规则做了扩展支持,所以能编译通过,但这并非标准要求的行为。

修正方案

有两种合规的修改方式:

  1. 将数组改为const限定类型,符合常量表达式初始化要求:
struct GPSinfo_T {
    const char fixSources[6];
    constexpr GPSinfo_T() :
        fixSources("NNNNN")
    {}
};
  1. 保留非const数组,通过逐个字符初始化的方式实现:
struct GPSinfo_T {
    char fixSources[6];
    constexpr GPSinfo_T() {
        const char src[] = "NNNNN";
        for (int i = 0; i < 6; ++i) {
            fixSources[i] = src[i];
        }
    }
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:27:36