如果一个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?
(是的,我知道存在一个更适合这种情况的!运算符;但是为了本问题的目的,我们将忽略它的存在;))
~
在执行任何操作之前会将参数提升为int
,因此~0
会转换为true
。如果没有查看代码,无法百分之百确定。 - chrisbool b = 13;
[或类似的事情] 是未定义行为吗?” - Mats Peterssonint
值13
会隐式转换为bool
,得到true
。 - Keith Thompson