![](/img/trans.png)
[英]warning C4800: 'int' : forcing value to bool 'true' or 'false'
[英]Why warning “forcing value to bool 'true' or 'false'” disappears when using not operator?
考慮以下使用Visual Studio 2015編譯的代碼:
#include <iostream>
#include <cassert>
void foo( bool b )
{
std::cout << b;
}
int main()
{
int a;
foo( a = 2 ); // getting warning #4800
foo( !(a = 2) ); // not getting any warning
return 0;
}
foo( a = 2 )
產生警告4800'int 'int': forcing value to bool 'true' or 'false'
,很好。
但是foo( !(a = 2) )
不會產生警告。 為什么? 在某個時候,已經有一個布爾值轉換為int了!
foo(a = 2)
等同於bool b = (a = 2)
。 表達式a = 2
返回a
,因此它等效於
a = 2;
bool b = a; //Conversion of 'int' to 'bool' -> Warning!
foo(!(a = 2))
等同於bool b = !(a = 2)
。 表達式a = 2
返回a
:
a = 2;
bool b = !a; //'!a' is legal => It returns a bool -> No warning!
請注意,您可以應用operator!
到int
,它使int
無效,因此返回bool
。 這就是為什么沒有性能警告的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.