假设这是代码
ostream& operator << (ostream& os, const classname& rhs)
{
//do sth
return os;
}
与 cout 配合使用效果很好<< classobj<<"etc";
但是,我不明白的地方:
为什么我做返回类型ostream而不是“ostream&”时不能返回;当我返回字符串时,即使返回类型是字符串也不起作用。不编译就报错
C++ 不能重载只有不同返回类型的函数
但是,它们的参数也不同,那为什么会这样呢?
2nd,如果返回类型与“ostream&”相同并且我返回“未”引用的操作系统,它不应该接受并将其作为引用操作系统返回吗?它也会出错。
为什么我做返回类型ostream而不是“ostream&”时不能返回;
因为
std::ostream
是不可复制的。
当我返回字符串时,即使返回类型是字符串也不起作用。不编译就报错
C++ 不能重载只有不同返回类型的函数
已经有
operator<<
的重载采用相同类型的参数。您不能添加重载,唯一的区别是返回类型。
如果返回类型与“ostream&”相同,而我返回“未”引用的操作系统,它不应该接受并将其作为引用操作系统返回吗?它也会出错。
我假设你的意思是:
std::ostream& operator<<(std::ostream os, const classname& rhs) {
// ^ not a reference
return os;
}
这将返回一个悬空引用,因为
os
是函数的局部变量。再说一次,ostream
s 不可复制,所以你无论如何都不能按价值来接受它。