返回重载类型>>

时间:2013-03-18 16:54:11

标签: c++ operators operator-overloading

有没有什么好的理由为什么标准的重载方式>>任何类的运算符都返回一个istream类型的对象(或任何输入流)。

例如,由于这个原因,代码如

y = (cin >> x) ;
如果重载>>具有输入对象的返回类型,则

将无效。

3 个答案:

答案 0 :(得分:2)

  

例如,由于这个原因,代码如

     

(cin >> x) = y;

     

不起作用。如果重载>>它会有有一个返回类型   输入对象。

不,它不一定 - 在许多情况下你会看到error: lvalue required as left operand of assignment,除非你返回一个引用。 (click here for a demonstration

一般原因是它允许链接,例如做像

这样的事情
mystream >> a >> b >> c;

对于输入/输出流,还有一个额外的好处是可以将流转换为void*(C ++ 03)或bool(C ++ 11),这允许检查构造中的错误,如

while (cin >> x) { ... }

答案 1 :(得分:0)

因为那样的东西     cin>> x>> ÿ 不行。这比前一个例子使用得更频繁。

答案 2 :(得分:0)

在极少数情况下(cin >> x) = y;会被期待。 期望左手变量是返回的变量。示例:(x += 5) = 7,返回“x”,然后设置为7 - “5”不是返回的内容。因此(cin >> x)的预期结果是返回'cin',这允许operator chaining的实现。

在你的:'(cin>> x)= y;'中,预期的阅读方式是“cin>> x”,然后是“cin = 7”。哪个没有多大意义。返回别的东西,只是让程序员阅读你的代码感到困惑,因为他们的期望没有得到满足。 (见Principle of least astonishment

这并不意味着'x y'始终需要返回对左侧的引用。通常,返回其他东西可能更有意义。例如,'myInt>> 4'返回'myInt'的副本,向右移位4位。