Jer*_*ner 10 c++ bit-manipulation undefined-behavior language-lawyer
如果C++程序将bitwise-not运算符(〜)应用于布尔值,那么它是否会调用未定义的行为?
例如,以下程序定义明确吗?
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?
Run Code Online (Sandbox Code Playgroud)
(是的,我知道有一个更适合这类事情的!运算符;出于这个问题的目的,我们将忽略它的存在;))
5.3.1/10操作数
~应具有整数或无范围的查点类型; 结果是其操作数的一个补码.执行整体促销.[强调我的]4.5/6类型
bool的prvalue可以转换为类型的prvalueint,false变为零并true成为一.4.5/7这些转换称为整体促销.
所以~false是一种int与由全部为一的位模式-表示0,即全零的位模式的一的补码(根据需要由3.9.1/7同样,.)~true是int这1位表示的一的补码-即,所有具有最低有效位的零.这两个值都将true在布尔上下文中求值.
| 归档时间: |
|
| 查看次数: |
495 次 |
| 最近记录: |