通过引用临时传递函数的生命周期
Lifetime of temporary passed through function by reference
我可以这样做:
const int &i = 5;
,并将临时的生存期延长为i
的生存期。
const int &fun (const int &i){
return i;
}
int main () {
const int &r = fun(5);
// Can I use r here?
}
代理-5的生存期是否还在延长?或者r
是一个悬空引用?
这是一个悬空引用。从[class.temporary]/4 - 5:
在两种上下文中,临时变量在fulexpression末尾的不同位置被销毁。第一个上下文是调用默认构造函数[…])
第二个上下文是当引用绑定到临时对象时。引用所指向的临时对象绑定的或临时的,它是引用被绑定到的子对象的完整对象在引用的生命周期内,除了:
- 在构造函数的参数初始化式[…]
中临时绑定到引用成员- 在函数调用(5.2.2)中,对引用形参的临时绑定将保持,直到完成包含调用的完整表达式。
- […]
5
一直持续到包含调用的完整表达式完成,也就是说:
const int &r = fun(5);
// <== no more 5
不,我不这么认为。你把5
绑定到参考上,这是fun
的参数,所以它持续的时间和那个参数持续的时间一样长。该参数只在调用fun
期间有效。
上一个问题探讨了相关的标准文本
相关文章:
- 如何在共享库的整个生命周期内存储数据
- 如何理解句子的生命周期始于对e的评估
- 它解决了什么问题,对于非真空初始化,生命周期在初始化之前就开始了
- Go/C++gRPC客户端通道和存根生命周期
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 是否可以通过使用移动/交换 c++11 来延长返回的临时变量的生命周期
- 使用对象的生命周期作为设置器的安全性
- 临时人员的生命周期传递给函数
- 我想知道在构造函数中初始化变量时的生命周期
- Lua 用户数据生命周期管理
- 如何使用 epoll(void* event.data.ptr) 管理 Connection 的生命周期
- C++引用的生命周期
- 在堆栈上有一个对象,而不是在函数的整个生命周期内
- 在 Boost ASIO 服务器中处理生命周期
- C++ lambda 生命周期
- 使用互斥锁跟踪另一个应用的生命周期
- QSharedPointer 或 std::shared_ptr 的生命周期
- 来自async_resolve的 boost::asio::ip::tcp::resolver::iterator 的生命周期是多久?
- 如何调整属于类的唯一指针的字符数组的大小.它必须在程序的整个生命周期中保持活力
- 延长 std::tuple<int&,int> 的生命周期,方法是将其分配给 const std::tuple<int, int>&