【发布时间】:2013-10-18 18:29:54
【问题描述】:
我正在通过引用返回并遇到临时对象。我不明白如何识别它们。请用这个例子解释:
如果a 和b 是同一类的对象,请考虑二进制operator+。如果在f(a+b) 等表达式中使用它,那么a+b 将成为临时对象,而f 必须是f(const <class name>&) 或f(<class name>) 的形式。它不能是f(<class name>&) 的形式,但是(a+b).g() 完全可以,g() 甚至可以更改a+b 返回的对象的内容。
【问题讨论】:
-
显示代码总比喋喋不休...
-
您可能想让问题更清楚,也许通过显示一段代码来显示问题。
-
我认为问题基本上是“为什么表达式 f(a+b) 会导致临时对象,而 (a+b).g() 不会?还有什么会导致表达式产生临时对象?”
-
@g-makulik 根据我刚刚添加的对问题的理解,问题是提问者不知道涉及什么代码。您如何确定哪些类型的代码会产生临时对象?如果问题是“涉及哪些类型的代码”,提问者可以提供什么代码?
-
@BlueMonkMN 太好了!我也大致了解了这一点,但只是认为出于教学原因强制 OP 发布真实代码会更好。