为什么重载任何类的>>操作符的标准方式返回istream(或任何输入流)类型的对象的标准方式有没有什么好的理由。返回类型的超载>>
例如,由于这一点,类似的代码
y = (cin >> x) ;
将不起作用,那就得,如果超载>>
有输入对象的返回类型。
为什么重载任何类的>>操作符的标准方式返回istream(或任何输入流)类型的对象的标准方式有没有什么好的理由。返回类型的超载>>
例如,由于这一点,类似的代码
y = (cin >> x) ;
将不起作用,那就得,如果超载>>
有输入对象的返回类型。
因为然后类似 cin >> x >> y 将无法正常工作。这比以前的例子更经常使用。
例如,由于这一点,类似的代码
(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) { ... }
在极少数情况下,(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位。
谢谢,我改变了我的例子(cin >> x)= y – user929404 2013-03-18 17:26:03