簡體   English   中英

左值引用返回臨時對象的成員函數的懸空引用嗎?

[英]Is the lvalue reference return of a member function of a temporary object a dangling reference?

有一個類CBase

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

如果我聲明一個左值引用和一個指針,

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

kk懸空參考, pp懸空指針?

我認為kkpp正在晃來晃去。 因為調用CBase()毫無疑問會創建一個臨時對象,所以衍生物CBase().Create()應該如此。 但是,Xcode(版本6.1)不提供警告或錯誤消息。

任何人都可以提供一些提示或告訴我C ++ 11文檔描述這些行為的位置嗎? 還是我錯了?

是的, kk是一個懸空參考, pp是一個懸垂的指針。 CBase()生成的臨時值僅在其出現的完整表達式的持續時間內存在。 請注意,指針或引用引用此對象仍然有效,只要它們的生命周期也綁定到表達式。

由於kkpp在完整表達后仍然存在,所以情況並非如此。 使用kk和解除引用pp具有未定義的行為。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM