遇到了无法理解的问题

liankaohk 2015-03-30 11:39:39
最近写一个程序时遇到了一个我完全没有头绪的问题,我把代码简化成下面这样请大家帮我看看。


#include <iostream>
using namespace std;

class A
{
public:
A operator++(int) { return A(); }
};

ostream& operator<<(ostream& os, A& a)
{
return os;
}

int main()
{
A a;
cout << a++;
return 0;
}


上面的代码编译时会出现一大段错误提示,但是只要我把 operator<<第二个参数改为const A& a或者A a就没有问题,我找了好久资料也查不到原因,只能来这里求助大神啦
...全文
132 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiht594 2015-03-31
  • 打赏
  • 举报
回复
标准库的 << 就是const, c++primer中推荐和标准库保持一致. 另外由于a++的自加操作返回的是一个临时对象, 所以不能引用. 因此对象或者const都可以,
zyc_0204 2015-03-31
  • 打赏
  • 举报
回复
上面回答 都对。最后一个是 右值引用 , c++11有的。
ztenv 版主 2015-03-31
  • 打赏
  • 举报
回复
懂了就好,今天忙现在才有时间看你的贴子
lincolnandlinda 2015-03-31
  • 打赏
  • 举报
回复
可以用这个

ostream& operator<<(ostream& os, A&& a)
liankaohk 2015-03-31
  • 打赏
  • 举报
回复
谢谢各位的热心解答,我现在懂了!
ri_aje 2015-03-31
  • 打赏
  • 举报
回复
a++ 的值是个临时对象,无法绑定到 A& 上,说以出错;标准允许临时对象绑定到 A const&,所以改了就OK;用 A 的话,是吧临时对象复制了一下,从语法上也过得去,就是可能影响效率。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧