c++ - constexpr 的按位运算会导致 constexpr 吗?
问题描述
我以如下所示的方式定义了一些常量
constexpr int a = 1;
constexpr int b = 2;
我的问题是是否所有仅使用并将被编译器视为的算术和按a
位运算b
?constexpr
例如,我想知道编译器是否保证计算c
编译时的表达式?如果没有,有没有办法要求编译时间计算?
c = (a + b) & (a | b);
解决方案
我的问题是是否所有仅使用并将被编译器视为的算术和按
a
位运算b
?constexpr
这样的表达式可以在constexpr
上下文中使用,但有一些例外(必须避免任何导致未定义或实现定义的行为,例如负数的按位右移、除以零、有符号类型的溢出)。
例如,我想知道编译器是否保证计算 c 编译时间的表达式?
仅当在需要编译时上下文的上下文中使用表达式时。
如果没有,有没有办法要求编译时间计算?
这就是constexpr
应用于变量的关键字的作用。假设您不能只将限定符添加到c
自身,因为它被用作变量(例如,稍后根据运行时数据重新分配),您仍然可以强制计算为constexpr
:
constexpr auto cvalue = (a + b) & (a | b);
c = cvalue;
推荐阅读
- java - 如何将字符添加到用户光标所在的 EditText
- angular - 无法将 ViewRef 注入 Angular 组件
- c++ - 如何解释 A>* 作为 A
>* 其中 B : 公共 C ? - c# - 使用 EntityDataReader 从数据库中读取实体对象
- cmd - 为什么我的 makefile 不能调用 Windows 10 cmd shell?
- ios - Variable inside JSON string
- c# - 在 .NETCore 3.1 和 4.7 System.IO.Ports 中获取“PlatformNotSupportedException”
- bash - 如何包含来自詹金斯的 bashprofile?
- java - 匹配两个字符串列表,其中一个列表可以包含带有通配符“?”的字符串
- javascript - 有没有办法通过应用内切换来强制 PWA 保持离线模式?