首页 > 解决方案 > 为什么在重载 << 运算符时 const 字不与 ostream 对象一起使用?

问题描述

重载 << 运算符的运算符函数原型为:

friend ostream& operator<<(ostream&, const className&);

我是新手,所以如果能用简单的例子来解释,将不胜感激。谢谢

标签: c++oopoperator-overloadingostream

解决方案


通常,当你写

foo f;
std::cout << f;

您忽略返回的值。请记住,调用运算符类似于调用方法,同一行可以写成:

operator<<(std::cout,f);

对于参数类型,请考虑将某些内容写入流确实会修改流的内部状态。因此,operator<<采用非常量引用。您不能传递const对象/引用,因为常量流不允许插入任何内容。

现在链接:

foo f,g;
std::cout << f << g;

如同

operator<<( operator<<( std::cout,f) , g);
            ------------------------
                     |
                     v
             returns non-const ref

如果operator<<将返回一个常量引用,则您无法链接它。


推荐阅读