我認爲這只是返回一個int。還有什麼我應該知道的嗎? C/C++的差異?當你邏輯不是浮動時會發生什麼?
float a = 2.5;
!a; // What does this return? Int? Float?
我認爲這只是返回一個int。還有什麼我應該知道的嗎? C/C++的差異?當你邏輯不是浮動時會發生什麼?
float a = 2.5;
!a; // What does this return? Int? Float?
關於C++,引用C++ 11§5.3.1/ 9:
邏輯非操作者
!
根據上下文轉換爲bool
的操作數;如果轉換後的操作數是false
和false
,則其值爲true
。結果的類型是bool
。
那麼什麼是真正此相關的是static_cast<bool>(some_float)
–報價行爲§4.12/ 1:
算術,無範圍的枚舉,指針,或指針的成員A型prvalue可轉換爲類型
bool
的價值。零值,空指針值或空成員指針值被轉換爲false
;任何其他值轉換爲true
。std::nullptr_t
類型的價值可以轉換爲bool
類型的價值;結果的值是false
。
把那些一起,2.5f
是一個非零值,並且將因此計算爲true
,其否定將計算爲false
時。即,!a
== false
。
關於C,引用C99§6.5.3.3/ 5:
邏輯非操作者
!
的結果是0
如果操作數的值,如果比較值不等於0
,1
其操作數的比較等於0
。結果爲int
。表達式!E
相當於(0==E)
。
I.e.最終結果與C++相同,除了類型。
見自己:
#include <iostream>
int main()
{
float a = 2.5;
if (!a)
std::cout << !a << "\n";
else
std::cout << !a << "\n";
}
可能的答案[here](http://stackoverflow.com/questions/1969620/c-float-to-bool-conversion) – cctan 2012-03-23 03:32:55