1

有一堂课CBase

class CBase
{
    ...
    CBase &Create()
    {
        return *this;
    }
    ...
}

如果我声明一个左值引用和一个指针,

CBase &kk = CBase().Create();
CBase *pp = &( CBase().Create() );

kk悬空引用还是pp悬空指针?

我认为kk并且pp悬而未决。因为调用CBase()无疑会创建一个临时对象,所以导数 ,CBase().Create()也应该是。但是,Xcode(6.1 版)没有给出警告或错误消息。

谁能给出一些提示或告诉我 C++11 文档在哪里描述了这些行为?还是我错了?

4

1 回答 1

3

是的,kk是一个悬空引用并且pp是一个悬空指针。由 产生的临时CBase()仅在它出现的完整表达式的持续时间内存在。请注意,让指针或引用引用此对象仍然有效,只要它们的生命周期也绑定到表达式。

由于kk并且pp在完整表达式之后仍然存在,因此情况并非如此。使用kk和取消引用pp具有未定义的行为。

于 2014-11-19T04:25:51.253 回答