rez*_*hsh 15 c++ implicit-conversion
该bool数据类型通常表示为0(如false)和1(如true)。但是,有人说true值可以用以外的值表示1。如果后面的语句是true,则以下表达式可能不正确。
bool x = 1;
if (x==1)
Do something..
Run Code Online (Sandbox Code Playgroud)
我想知道以下语句是否可以在常用的编译器上按期望和预期的方式工作。
bool x = 1;
if (x==1)
Do something.
Run Code Online (Sandbox Code Playgroud)
bool y = 0;
if (y>0.5)
Do something..
Run Code Online (Sandbox Code Playgroud)
bool z = 1;
if(z>0.5)
Do something...
Run Code Online (Sandbox Code Playgroud)aki*_*han 13
C ++标准的第4.5节说:
bool类型的右值可以转换为int类型的右值,false变为零,true变为1。
关于2和3,发生类型转换,因此语句将按需工作
根据布尔转换的规则:
整数,浮点数,无作用域枚举,指针和指针成员类型的prvalue可以转换为type的prvalue
bool。值零(对于整数,浮点数和无作用域枚举),空指针和成员空指针值变为
false。所有其他值变为true。
然后
bool x = 1; // x will be true
bool y = 0; // y will be false
bool z = 1; // z will be true
Run Code Online (Sandbox Code Playgroud)
对于第一种情况下,if (x==1),x会被提拔到int,
该类型
bool可以转换为int值false成为?0?并true成为1。
然后(x==1)是true。
对于第二种情况,if (y>0.5),y将被提升为int与值0,然后转换到double用于比较 ;
如果操作数具有算术或枚举类型(作用域或非作用域),则将按照算术运算符的规则对两个操作数执行常规的算术转换。转换后将比较这些值:
和
如果传递给算术运算符的操作数是整数或无作用域枚举类型,则在执行任何其他操作之前(但在从左值到右值转换之后,如果适用),操作数将进行整数提升。
...
- 否则,如果其中一个操作数为
double,则另一个操作数将转换为double
然后y>0.5是false。
对于第三种情况,if (z>0.5),z将被提升为int与值1,然后转换到double用于比较 ; 然后z>0.5是true。
| 归档时间: |
|
| 查看次数: |
1717 次 |
| 最近记录: |