为什么函数只能返回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对象的引用,从而实现连续的左移运算。
【相关推荐】