【发布时间】:2018-11-28 11:37:37
【问题描述】:
以下代码是否正确或是否由于悬空引用而产生未定义的行为以及为什么它完全正确:
class A {};
class B : public A {};
B& f(A& a) {
// Dangling reference here?
return static_cast<B&>(a);
}
int main()
{
A a;
B& b = f(a);
}
【问题讨论】:
-
@Incomputable 我仔细检查过,我认为您的“可能重复”是正确的。
-
你没有创建任何临时对象,所以这里什么都没有
-
a都指向同一个对象,其生命周期在离开main时结束。b指的是a的一个子对象,它的生命周期也在离开main时结束。所以没有悬空的参考。 -
我查看了
static_cast的文档。 downcast 在这种情况下究竟是什么意思?
标签: c++ c++11 language-lawyer