我认为这只会返回一个int。还有什么事情我应该知道吗? C / C ++差异?
float a = 2.5;
!a; // What does this return? Int? Float?
答案 0 :(得分:36)
关于C ++,引用C ++11§5.3.1/ 9:
逻辑否定运算符
!
的操作数在上下文中转换为bool
;如果转换后的操作数为true
,则其值为false
,否则为false
。结果的类型为bool
。
那么真正相关的是static_cast<bool>(some_float)
的行为 - 引用§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
,1
,如果其操作数的值比较等于0
。结果的类型为int
。表达式!E
相当于(0==E)
。
即。除了类型之外,最终结果与C ++相同。
答案 1 :(得分:8)
来自here
如果一个浮点数恰好为0.0f,则转换为false 如果它不是真的0.0f,那也是如此 Inifinity也将转换为true。
答案 2 :(得分:0)
亲眼看看:
#include <iostream>
int main()
{
float a = 2.5;
if ( !a )
std::cout << !a << "\n";
else
std::cout << !a << "\n";
}