如果 C++ 程序将按位非运算符 (~) 应用于布尔值,是否会调用未定义行为?
例如。以下程序定义明确吗?
bool f = false;
bool f2 = ~f; // is f2 guaranteed to be true, or is this UB?
bool t = true;
bool t2 = ~t; // is t2 guaranteed to be false, or is this UB?
(是的,我知道有一个 ! 运算符更适合这类事情;出于这个问题的目的,我们将忽略它的存在;))
5.3.1/10的操作数为~
应具有整数或无范围枚举类型;结果是其操作数的反码。进行积分促销。[强调我的]
4.5/6类型的纯右值bool
可以转换为类型的纯右值int
, with false
变为零并且true
成为一体。
4.5/7这些转换称为积分促销.
So ~false
is an int
具有由全 1 组成的位模式 - 代表 0 的位模式的补码,即全零(根据要求3.9.1/7。) 相似地,~true
is an int
这是 1 的位表示的补码 - 即所有最低有效位为零。这两个值都将计算为true
在布尔上下文中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)