c++中运算符重载返回类型问题

问题描述 投票:0回答:1

假设这是代码

ostream& operator << (ostream& os, const classname& rhs)
{
    //do sth
    return os;
}

与 cout 配合使用效果很好<< classobj<<"etc";

但是,我不明白的地方:

为什么我做返回类型ostream而不是“ostream&”时不能返回;当我返回字符串时,即使返回类型是字符串也不起作用。不编译就报错

C++ 不能重载只有不同返回类型的函数

但是,它们的参数也不同,那为什么会这样呢?

2nd,如果返回类型与“ostream&”相同并且我返回“未”引用的操作系统,它不应该接受并将其作为引用操作系统返回吗?它也会出错。

c++ function operator-overloading
1个回答
0
投票

为什么我做返回类型ostream而不是“ostream&”时不能返回;

因为

std::ostream
是不可复制的。

当我返回字符串时,即使返回类型是字符串也不起作用。不编译就报错

C++ 不能重载只有不同返回类型的函数

已经有

operator<<
的重载采用相同类型的参数。您不能添加重载,唯一的区别是返回类型。

如果返回类型与“ostream&”相同,而我返回“未”引用的操作系统,它不应该接受并将其作为引用操作系统返回吗?它也会出错。

我假设你的意思是:

std::ostream& operator<<(std::ostream os, const classname& rhs) {
    //                              ^ not a reference 
    return os;
}

这将返回一个悬空引用,因为

os
是函数的局部变量。再说一次,
ostream
s 不可复制,所以你无论如何都不能按价值来接受它。

© www.soinside.com 2019 - 2024. All rights reserved.