c++ - 返回对临时对象成员的 const 引用

标签 c++ c++11 temporary-objects

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

例如

struct temp
{
  T m_mine;

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

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

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

最佳答案

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

同样,如果您将成员引用绑定(bind)到 const,绑定(bind)到一个对象,这不会延长裁判的生命周期。

对象生命周期延长仅适用于将本地引用绑定(bind)到对象的情况,并且仅适用于引用const 对象或右值引用的情况。


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

(此外,由于现在至少有 2 个答案涉及代码问题,因此在不改变答案的上下文并因此使它们无效的情况下更正它为时已晚。所以重要的是要获得原始帖子中的代码正确。下一个 SO 问题值得牢记。)

关于c++ - 返回对临时对象成员的 const 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186098/

相关文章:

C++11 typelist unroller 和静态函数的代理调用者

c++ - 我可以在 C++ 中移动临时对象的属性吗?

c++ - 解释指针的这种情况

c++ - 发送 UDP 数据包的长时间延迟

C++ : overflow in implicit constant conversion [-Woverflow]

在哈希表上使用 get() 方法时的 scala 速度? (是否生成临时 Option() 对象?)

c++ - 禁止实例化为临时对象 (C++)

C++ 函数参数丢失部分地址

c++ - __builtin___clear_cache 是如何工作的?

c++ - 没有可行的 XML 解析程序重载