2011-09-19 105 views
4

這個代碼布爾型操作

#include <iostream> 

using namespace std; 
int main(){ 
    bool t=false; 
    cout<<t &&(!t)<<endl; 

    return 0; 
} 

顯示我喜歡的類型 '布爾' 和 '的' 二進制 '操作< <'

無效操作數錯誤哪裏不對?我無法理解這一點,請向我解釋。我認爲&&!是在C++中定義的。

那又怎麼了?

回答

16

「的類型無效的操作數'bool'和''二進制'運算符< <「」

這意味着第二<<運營商正試圖執行的(!t)和 'ENDL'。

<<具有更高的優先級比&&讓你的cout語句執行這樣的:

(cout << t) && ((!t) << endl);

添加括號來解決這個問題:

cout << (t && (!t)) << endl ;

here運營時的順序報表沒有按預期進行評估。

+0

非常感謝@mydogisbox它幫助了我太多 –

+0

@ user466534很高興提供幫助。 – mydogisbox

6

添加括號來獲得運營權的優先級:

cout << (t && !t) << endl; 

等價的:

cout << false << endl; 
+0

我試過介紹新的bool m = t &&(!t),它的工作原理是 –

+1

@user:再次,運營商的優先級......查找它! –

2

你需要一些更多的括號:

cout << (t && !t) << endl; 
2

問題是與運算符優先級,爲&&具有優先級低於<<

cout<<(t && (!t))<<endl; // ok! 

同樣對於任何bool可變t表達t && (!t)總是導致falset || (!t)總是導致true。 :)