C ++重载<<输入对象没有const会产生错误,而const对象会消失

时间:2013-01-18 06:35:23

标签: c++ compiler-errors operator-overloading const

我有以下运算符重载原型:

 ostream& operator<<(ostream & outputstream, my_arr& arr)

 my_arr operator+(const my_arr& left, const my_arr& right)

我打电话:

 cout << (arr1 + arr2);

这给了我以下编译器错误:

error: no match for ‘operator<<’ in ‘std::cout << operator+(const my_array&, const my_array&)((*(const my_array*)(& y)))’

如果我更改&lt;&lt;&lt;&lt;以下内容:

  ostream& operator<<(ostream & outputstream, const my_arr& arr)

我可能会遗漏一些基本的东西,但为什么会这样呢? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

问题是当作为参考传递时,您不能传递“临时”(rvalue)对象,例如添加的结果。传递const引用时,C ++规则允许传递临时值,因为它保证不会被写入。

答案 1 :(得分:2)

如前所述,这是一个临时的(右值)。您还可以提供输出操作的重载,其形式为:

ostream& operator<<(ostream& outputstream, my_arr&& arr);
然后cout << (arr1 + arr2);将使用

答案 2 :(得分:1)

因为operator+中有拼写错误,您还需要将const my_arr传递给operator

my_array operator+(const my_arr& left, const my_arr& right)
^^^^ should be my_arr                   ^^^ need to be const

或者您必须为operator<<

重载my_array
ostream& operator<<(ostream & outputstream, my_arr& arr)

否则代码只会编译并运行OK:sample link