首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >任何类型的文字的生命时间是什么,如果我们持有它的引用或者是通过rvalue引用将它传递给一个函数?

任何类型的文字的生命时间是什么,如果我们持有它的引用或者是通过rvalue引用将它传递给一个函数?
EN

Stack Overflow用户
提问于 2022-01-10 16:14:11
回答 1查看 55关注 0票数 0

我有以下代码:

代码语言:javascript
复制
#include <iostream>

using namespace std;
    
void func1(int &&val) {
    
    // statements
    
}
    
int main() {
    
    const int &i = 5; //line1
    
    func1(4);// line 2
    
    return 0;
}

第1行中I的生存期是否与main()的生存期或作用域相同?第2行中整数字面值4的生存期如何,它的生存期是否也与main()相同?

EN

回答 1

Stack Overflow用户

发布于 2022-01-10 16:23:32

在第1行中,从prvalue 5实现的临时对象的生存期被扩展到绑定到的引用的生存期。因此,暂时的生活直到main的结束,在那里i的范围结束。

这是一般规则:临时是生存期--延长到绑定到它的第一个引用的生存期。

这个规则有几个例外,即当引用是函数的返回值时,当使用C++20括号大小的聚合初始化和在new表达式中时,它不适用。在这些情况下,临时生命只到包含它的完整表达式结束为止,这通常比引用的生存期短。

此外,必须确保在创建临时绑定和引用绑定之间仅对引用对象的表达式执行某些操作。有关完整列表,请参见优先选择

而且,当我说第一次引用的时候,我是认真的。如果要将临时对象传递给另一个对象的构造函数,则构造函数参数中的引用已经计算在内。通过这种方式,通常不能通过在类的引用成员中“存储”对象来延长对象的生存期。

在第2行中,以一种稍微不同的方式,它是一个例外。如果所讨论的引用是函数调用中的函数参数,则临时生命一直持续到函数调用的完整表达式的末尾,因此直到行尾。在这种情况下,临时生命比引用长。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70655529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档