gpt4 book ai didi

c++ - 临时对象的成员函数的左值引用返回是悬挂引用吗?

转载 作者:行者123 更新时间:2023-11-30 02:42:31 29 4
gpt4 key购买 nike

有一个类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() 生成的临时文件仅在它出现的完整表达式的持续时间内存在。请注意,指针或引用指向此对象仍然有效,只要它们的生命周期也绑定(bind)到表达式即可。

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

关于c++ - 临时对象的成员函数的左值引用返回是悬挂引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27008853/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com