3

为任何类重载 >> 运算符的标准方法返回 istream(或任何输入流)类型的对象是否有充分的理由。

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

y = (cin >> x) ;

>>如果重载具有输入对象的返回类型,它将不起作用。

4

3 回答 3

2

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

(cin >> x) = y;

不会工作。如果重载 >> 具有输入对象的返回类型,它将具有。

不,它不一定 - 在很多情况下你会看到error: lvalue required as left operand of assignment,除非你返回一个参考。(点击这里进行演示

一般的原因是它允许链接,例如做类似的事情

mystream >> a >> b >> c;

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

while (cin >> x) { ... }
于 2013-03-18T17:02:26.110 回答
0

因为那时像 cin >> x >> y 这样的东西就行不通了。这比前面的例子使用得更频繁。

于 2013-03-18T16:54:11.327 回答
0

在极少数情况下(cin >> x) = y;是需要的。预计左侧变量是要返回的变量。示例:(x += 5) = 7, 'x' 被返回,然后设置为 7 - '5' 不是返回的。所以(cin >> x)'cin' 的预期结果是返回,它允许实现operator chaining

在您的:'(cin >> x) = y;'中,预期的阅读方式是“cin >> x”,然后是“cin = 7”。这没有多大意义。返回其他内容只会让阅读您的代码的程序员感到困惑,因为他们的期望没有得到满足。(见最小惊讶原则

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

于 2013-03-18T17:05:12.967 回答