Nat*_*Fig 25 c c++ floating-point logic logical-operators
我假设这只返回一个int.还有什么事情我应该知道吗?C/C++的差异?
float a = 2.5;
!a; // What does this return? Int? Float?
Run Code Online (Sandbox Code Playgroud)
ild*_*arn 38
关于C++,引用C++11§5.3.1/ 9:
逻辑否定运算符的操作数在
!上下文中转换为bool;true如果转换的操作数是false,false则其值为.结果的类型是bool.
所以这里真正重要的是static_cast<bool>(some_float)- 引用§4.12/ 1 的行为:
算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为类型的prvalue
bool.将零值,空指针值或空成员指针值转换为false; 任何其他值都转换为true.类型std::nullptr_t的prvalue可以转换为类型的prvaluebool; 结果值是false.
将它们放在一起,2.5f是一个非零值,因此将评估true,当否定将评估为false.即,!a== false.
关于C,引用C99§6.5.3.3/ 5:
逻辑否定运算符的结果
!是,0如果其操作数的值比较等于0,1则其操作数的值不等于0.结果有类型int.表达式!E相当于(0==E).
即净结果与C++相同,除了类型.