【发布时间】:2019-09-10 04:55:11
【问题描述】:
我一直在阅读有关运算符重载的文章,并且了解到,如果从函数返回引用,则可以级联重载的运算符。
我的问题是这样的。为了返回引用,您需要将引用传递给函数,还是将值传递给函数?
例如两者都有效吗?
ostream &operator<<(ostream output, string &label);
和
ostream &operator<<(ostream &output, string &label);
第一个是否也会返回对传递给函数的输出流参数的有效引用,还是需要将输出流对象作为引用传入才能将其作为引用返回?
【问题讨论】:
-
如果你传递一个值,编译器会发送一个副本。然后您返回对副本的引用,然后行结束,副本被破坏......您的引用悬空。
-
如果你打算返回一个对传递的东西的引用,那应该作为引用传递。在
operator<<()流式传输到ostreams 的情况下,ostream必须通过引用传递。按值传递意味着返回对临时(参数)的引用,这会导致未定义的行为。
标签: c++ operator-overloading pass-by-reference