如果你不合理,那么会发生什么?
我假设这只返回一个int。 还有什么事情我应该知道吗? C / C ++的差异?
float a = 2.5; !a; // What does this return? Int? Float?
关于C ++,引用C ++11§5.3.1/ 9:
逻辑否定运算符的操作数
!
在上下文中转换为bool
; 如果转换的操作数为false
,则其值为true
,否则为false
。 结果的类型是bool
。
所以这里真正重要的是static_cast
的行为 – 引用§4.12/ 1:
算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为
bool
类型的prvalue。 零值,空指针值或空成员指针值转换为false
; 任何其他值都转换为true
。 类型为std::nullptr_t
的prvalue可以转换为bool
类型的prvalue; 结果值为false
。
将这些放在一起, 2.5f
是一个非零值,因此将评估为true
,否则将评估为false
。 即, !a
== false
。
关于C,引用C99§6.5.3.3/ 5:
逻辑否定运算符的结果
!
如果其操作数的值不等于0
,则为0
;如果其操作数的值等于0
,则为1
。 结果是int
类型。 表达式!E
等价于(0==E)
。
即净结果与C ++相同,除了类型。
从这里开始
如果float正好是0.0f,则float将被转换为false,
如果它不是真的0.0f也是如此!
Inifinity也将转换为true。
你自己看:
#include int main() { float a = 2.5; if ( !a ) std::cout << !a << "\n"; else std::cout << !a << "\n"; }