传递引用参数并返回引用

时间:2019-04-20 03:27:05

标签: c++ operator-overloading pass-by-reference

我一直在阅读有关运算符重载的信息,并且了解到,如果您从函数返回引用,则可以级联重载的运算符。

我的问题是这个。为了返回引用,您是否需要将引用传递给函数,或者值会传递?

例如都有效吗?

ostream &operator<<(ostream output, string &label);

ostream &operator<<(ostream &output, string &label);

第一个还会返回对传递给函数的输出流参数的有效引用吗,还是您需要传入输出流对象作为引用以将其作为引用返回?

1 个答案:

答案 0 :(得分:1)

您不能使用

std::ostream &operator<<(std::ostream output, std::string &label);

因为std::ostream没有副本构造函数。

即使std::ostream具有复制构造函数,使用上述接口也会导致以下问题。

问题1

返回对输入参数的引用将是一个问题。函数返回后,该对象将不活动。因此,一旦函数返回,返回的引用将是悬空引用。使用悬空参考会导致不确定的行为。

问题2

这是假设。

想象一下如果您使用以下内容会发生什么情况:

std::ofstream outfile("myoutput.txt");
outfile << "A string.";

该调用将导致对象切片。您将失去对象的std::ofstream-性。输出将在该函数中输出到哪里?当然不会进入文件。


粘在一起
std::ostream &operator<<(std::ostream &output, std::string const& label);

PS 是,我确实将第二个参数的类型更改为const&