[英]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
懸空指針?
我認為kk
和pp
正在晃來晃去。 因為調用CBase()
毫無疑問會創建一個臨時對象,所以衍生物CBase().Create()
應該如此。 但是,Xcode(版本6.1)不提供警告或錯誤消息。
任何人都可以提供一些提示或告訴我C ++ 11文檔描述這些行為的位置嗎? 還是我錯了?
是的, kk
是一個懸空參考, pp
是一個懸垂的指針。 由CBase()
生成的臨時值僅在其出現的完整表達式的持續時間內存在。 請注意,指針或引用引用此對象仍然有效,只要它們的生命周期也綁定到表達式。
由於kk
和pp
在完整表達后仍然存在,所以情況並非如此。 使用kk
和解除引用pp
具有未定義的行為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.