【发布时间】:2015-10-17 11:29:35
【问题描述】:
当返回对临时对象成员的 const 引用时会发生什么;该对象的生命周期是多少;
例如
struct temp
{
T m_mine;
static temp make()
{
return temp();
}
};
T const & foo()
{
return temp::make().m_mine;
}
c++98 和 c++11 的行为是什么?
【问题讨论】:
-
"该对象的生命周期是多少;"在调用对象
struct temp的析构函数之前,该引用一直有效。在您的示例中,您不返回临时对象,而是返回对成员变量的const引用(即m_mine)。如果您返回对已经超出范围的对象的引用,则这是未定义的行为。 -
我认为编译器会忽略返回类型的 const 方面。
-
@101010 这不正是我要问的吗?
-
销毁
temp也会销毁它的成员,不是吗?所以问题实际上是临时对象何时被销毁,以及如果您之后尝试访问它会发生什么。 “未定义的行为”意味着它实际上可能看起来工作正常,也就是说,您可能能够从返回的T const &读取数据而不会出错,在某些系统上的某些编译器中,在美好的一天。但是你为什么要这样做呢? -
return temp;也是非法的,也许你的意思是return temp();?
标签: c++ c++11 temporary-objects