有没有什么好的理由为什么标准的重载方式>>任何类的运算符都返回一个istream类型的对象(或任何输入流)。
例如,由于这个原因,代码如
y = (cin >> x) ;
如果重载>>
具有输入对象的返回类型,则将无效。
答案 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位。