此代码
#include <iostream>
using namespace std;
int main(){
bool t=false;
cout<<t &&(!t)<<endl;
return 0;
}
显示我这样的错误
类型'bool'和''到二进制的无效操作数 '运营商LT;&LT;'
有什么问题?我无法理解这一点,请向我解释。我认为&&
和!
是在c ++中定义的。
那有什么不对?
答案 0 :(得分:16)
“类型'bool'和''到二进制'运算符的无效操作数&lt;&lt;'<”
这意味着第二个<<
运算符正在尝试执行(!t)和'endl'。
<<
的优先级高于&&
,因此您的cout语句的执行方式如下:
(cout << t ) && ( (!t) << endl );
添加括号以解决此问题:
cout << (t && (!t) ) << endl ;
当语句未按预期评估时,查看here的操作顺序。
答案 1 :(得分:6)
添加括号以获得运算符的优先权:
cout << (t && !t) << endl;
等效地:
cout << false << endl;
答案 2 :(得分:3)
&&
的优先级低于<<
,因此该语句的评估结果为(cout << t) && (!t << endl);
答案 3 :(得分:2)
您需要更多括号:
cout << (t && !t) << endl;
答案 4 :(得分:2)
问题在于运算符优先级,因为 &&
的优先级低于<<
。
cout<<(t && (!t))<<endl; // ok!
对于任何bool
变量t
,表达式t && (!t)
始终会生成false
,而t || (!t)
始终会生成true
。 :)