c++ - 如何解决此错误“'x1' 的值在常量表达式中不可用”?静态断言
问题描述
给定以下代码(仅用于示例):
int x1 = 4;
int x2 = 5;
static_assert(x1 != x2 ,"Error");
我收到以下错误:
'x1' 的值在常量表达式中不可用
我该如何解决?
注意:我正在寻找一种方法来修复它,而无需以这种方式更改变量的定义:
const int x1 = 4;
const int x2 = 5;
但是,我只想通过改变线来修复它static_assert(..)
解决方案
好吧,正确的解决方法是
constexpr int x1 = 4;
constexpr int x2 = 5;
否则,编译器如何知道(完全一般性和一致性)x1
并且x2
是编译时可评估的常量表达式?
如果x1
并且x2
需要是int
类型,那么您需要使用运行时断言,例如assert
:
assert(x1 != x2)
但请注意,如果已定义,assert
则不会评估传递给的表达式。NDEBUG
如果表达式有副作用,这可能会导致不同的构建配置出现问题。
推荐阅读
- java - 通用 memoize 函数抛出 ConcurrentModificationException
- php - 如何在 PHP 中的子类继承方法中定义更严格的类型?
- redis - 如何从java代码执行redis缓存INFO命令
- sql - 按特定顺序对值进行排序 Oracle SQL
- python - 尝试使用 pip 安装“请求”包时出现 Python 错误
- reactjs - 材料 ui 未安装在 React Js 项目中
- javascript - handleSubmit [React] 处理程序的正确实现
- python - Twitter API 发布请求——错误代码 215 错误的身份验证数据
- firebase - Firebase Auth:是否可以同时登录两台设备?
- reactjs - 使用 next.js 时出现服务器错误,错误:找不到 react-redux 上下文值;请确保组件被包裹在一个