繁体   English   中英

将const引用返回给临时对象的成员

[英]returning const reference to a member of a temporary object

当返回对临时对象的成员的const引用时会发生什么; 那个对象的生命周期是多少;

例如

struct temp
{
  T m_mine;

  static temp make()
  {
    return temp();
  }
};

T const & foo()
{
  return temp::make().m_mine;
}

c ++ 98和c ++ 11的行为是什么?

在这种情况下,对象或裁判类型的常量无关紧要:它只是返回对当时不再存在的对象的引用。 然后使用引用是未定义的行为。

同样,如果将对const的成员引用绑定到对象,则不会延长裁判的生命。

对象生存期扩展仅适用于将本地引用绑定到对象的情况,仅适用于引用const对象或rvalue引用的情况。


我写这篇文章时的示例代码有几个问题。 请仅发布实际代码 (尽可能发布)。 它应该粘贴,而不是重新输入。

(另外,由于现在至少有2个答案涉及代码的问题,因此在不改变答案的上下文并因此使其无效的情况下纠正它为时已晚。因此,在原始发布中获取代码非常重要值得记住下一个SO问题。)

在进行编译之前,您的代码在多个帐户中是不正确的:

  • 类型声明后至少缺少一个分号
  • 代码使用非static成员make() ,就像它是static函数一样

一旦克服了这一点:返回的引用引用了一个对象的子对象,该对象在执行return语句之后以及任何可以获取它之前被销毁。 也就是说,有一个陈旧的参考回报。 对此引用的任何访问都将导致未定义的行为。 如果运气好的话,程序会在此时崩溃。 如果你运气不好,它会做你喜欢的事情。 例如,它可以“工作”,直到程序被证明给客户或投资者,此时它可能决定反而显示侮辱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM