为什么函数只能返回ostream&而不能返回ostream
`
class a
{
};
ostream& operator<<(ostream& cout,a &b)
{
return cout;
}
int main()
{
a b;
cout << b;
}
```
为什么函数只能返回ostream&而不能返回ostream
`
class a
{
};
ostream& operator<<(ostream& cout,a &b)
{
return cout;
}
int main()
{
a b;
cout << b;
}
```
【以下回答由 GPT 生成】
在C++中,左移运算符重载的函数必须返回ostream&
而不能返回ostream
的原因是为了支持连续的左移运算。
左移运算符实际上是一个二元运算符,它接受两个参数——左操作数和右操作数。当我们使用cout << b
时,cout
被视为左操作数,而b
被视为右操作数。左移运算符的重载函数实际上是作为成员函数调用的,因此,可以将上述的运算表达式看作是cout.operator<<(b)
。
为了实现连续的左移运算,也就是cout << b1 << b2 << b3
,重载函数必须返回一个值,以便我们可以通过返回的ostream
对象继续调用左移运算符。
如果重载的函数返回类型是ostream
,而不是ostream&
,那么在连续的左移运算中,后续的操作将会作用在临时对象上,而不是原始的cout
对象上。这将导致预期的输出无法实现。
因此,在重载左移运算符时,函数类型必须是ostream&
,这样才能返回原始的cout
对象的引用,从而实现连续的左移运算。
【相关推荐】