如果你不合理,那么会发生什么?

我假设这只返回一个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(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 ;如果其操作数的值等于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"; }