首页 > 解决方案 > 如何解决此错误“'x1' 的值在常量表达式中不可用”?静态断言

问题描述

给定以下代码(仅用于示例):

    int x1 = 4;
    int x2 = 5;
    static_assert(x1 != x2 ,"Error");

我收到以下错误:

'x1' 的值在常量表达式中不可用

我该如何解决?


注意:我正在寻找一种方法来修复它,而无需以这种方式更改变量的定义:

const int x1 = 4;
const int x2 = 5;

但是,我只想通过改变线来修复它static_assert(..)

标签: c++c++11

解决方案


好吧,正确的解决方法是

constexpr int x1 = 4;
constexpr int x2 = 5;

否则,编译器如何知道(完全一般性和一致性)x1并且x2是编译时可评估的常量表达式?

如果x1并且x2需要是int类型,那么您需要使用运行时断言,例如assert

assert(x1 != x2)

但请注意,如果已定义,assert不会评估传递给的表达式。NDEBUG如果表达式有副作用,这可能会导致不同的构建配置出现问题。

参考:https ://en.cppreference.com/w/cpp/error/assert


推荐阅读