【发布时间】:2018-08-22 05:57:03
【问题描述】:
在下面的sn-p中,球体的生命周期是否以r的值不是未定义的方式延长?
struct Sphere {
auto& radius() const { return _radius;}
float _radius{};
};
struct Capsule {
auto sphere() const { return Sphere{12.0}; }
};
auto func() {
auto capsule = Capsule{};
const auto& r = capsule.sphere().radius();
std::cout << r;
}
我知道 const 引用会延长临时对象的生命周期,但我不确定如果临时对象的成员被绑定会发生什么。
注意:我很怀疑这个 sn-p 的等价物会给我带来错误,但 Clang 和 Visual Studio 都没有发出警告。
【问题讨论】:
-
与我在this question of mine 中观察到的相同。我认为某处有一个骗子......
-
在这种情况下,是的,
r是悬空的。从sphere()返回的对象的生命周期不会延长到r的整个生命周期 -
@Justin 是的,从技术上讲是重复的,但我认为这个问题更容易理解,因为它不涉及 std::map
-
这和this question有些相似