2013-03-18 57 views
3

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

例如,由于这一点,类似的代码

y = (cin >> x) ; 

将不起作用,那就得,如果超载>>有输入对象的返回类型。

回答

0

因为然后类似 cin >> x >> y 将无法​​正常工作。这比以前的例子更经常使用。

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) { ... } 
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

这并不意味着'xy'总是需要返回一个引用到左边。通常情况下,它可能会更有意义的返回别的东西。例如,'myInt >> 4'返回'myInt'的副本向右移4位。

+0

谢谢,我改变了我的例子(cin >> x)= y – user929404 2013-03-18 17:26:03

相关问题