我正在创建一个Matrix类,我正在重载所有基本运算符。例如:
class Matrix {
Matrix operator<(const float& ); // returns a Matrix with
// entries 0 or 1 based on
// whether the element is less than
// what's passed in.
};
我还写了一个流媒体运营商:
ostream &operator<<(ostream&cout,const Matrix &M){
for(int i=0;i<M.rows;++i) {
for(int j=0;j<M.columns;++j) {
cout<<M.array[i][j]<<" ";
}
cout<<endl;
}
return cout;
}
但是,当我尝试使用这些时:
int main() {
Matrix M1;
cout << M1 < 5.8;
}
我收到此错误:
错误:“
中的“operator<
”operator<<((* & std::cout), (*(const Matrix*)(& m))) < 5.7999999999999998e+0
”不匹配
这个错误是什么意思?
答案 0 :(得分:6)
左流媒体运营商<<
的优先级高于比较运算符<
。
因此...
cout << M1 < 5.8
相当于
(cout << M1) < 5.8
http://en.cppreference.com/w/cpp/language/operator_precedence
PS。这种行为是 dumb ,但出于历史原因,我们仍然坚持使用它。 <<
的初衷是数学运算(这个优先级有意义),而不是流式传输。