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

constexpr表达式在VS编译通过但GCC报错的技术咨询

constexpr if代码在GCC编译报错的原因及解决方法

我了解到constexpr if是C++17的新特性,可通过if语句实现编译期检查。我编写了如下示例代码,在微软Visual Studio中运行输出else,但在GCC编译器中报错。

示例代码:

#include <iostream>
int main()
{
    if constexpr( constexpr(5) == sizeof(int) )
    {
         std::cout<<"if";
    }
    else
    {
        std::cout<<"else";
    }
}

GCC报错信息:

error: expected primary-expression before 'constexpr'

问题原因及解决方法

问题出在constexpr(5)这个写法上,C++标准里并没有constexpr()这种语法——constexpr是关键字,用于声明常量表达式或标注函数/变量具备常量表达式特性,不能像函数一样调用。

你想要的是让5作为常量表达式参与比较,直接写5 == sizeof(int)就足够了:5本身是字面量常量表达式,sizeof(int)也是编译期可计算的常量表达式。修改后的代码如下:

#include <iostream>
int main()
{
    if constexpr(5 == sizeof(int))
    {
         std::cout<<"if";
    }
    else
    {
        std::cout<<"else";
    }
}

VS能运行是因为其编译器(MSVC)做了非标准语法扩展,允许这种不符合C++标准的写法,而GCC严格遵循标准,所以会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:47:31