簡體   English   中英

不使用運算符時,為什么警告“強制將值強制設置為“ true”或“ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM