使用const引用延长临时对象的寿命

用户3762146

我需要一些关于 const 引用的说明。这个链接

const Foo &myFoo = FuncBar();

const reference延长了本地对象的寿命。但是当我检查此链接时,尽管他们使用了const引用

Sandbox(const string& n) : member(n) {}

字符串“four”的生命周期没有增加。

Sandbox sandbox(string("four"));

他们用了一句话

只有本地const引用才能延长寿命。

然后在第二个链接中不是主函数本地的字符串“four”,const 引用不应该n延长它的寿命吗?
那么为什么第二个链接的寿命没有延长呢?

一世

您引用的两个链接在某种意义上是不同的,一个链接表示使用本地const引用,而另一个链接表示使用类成员const引用。

当我们创建局部常量引用并引用一个临时对象时,在这个编译器中会延长临时对象的生命周期,直到局部常量引用的范围。

指向临时对象的类成员 const 引用将导致意外结果,因为临时对象的生命周期不会超出为初始化类成员引用而调用的构造函数。正如在其中一个答案中所解释的那样,临时对象只会在构造函数完成之前存活。

引用以下答案:常量引用是否会延长临时对象的寿命?

生命周期扩展不能通过函数参数传递。§12.2/5 [class.temporary]:

第二个上下文是引用绑定到临时对象时。引用绑定到的临时对象或作为临时对象绑定到的子对象的完整对象的临时对象在引用的生命周期内持续存在,除非在下面指定。临时绑定到构造函数的 ctor-initializer (§12.6.2 [class.base.init]) 中的引用成员会一直存在,直到构造函数退出。函数调用(第 5.2.2 节 [expr.call])中引用参数的临时绑定一直存在,直到包含调用的完整表达式完成。

如果正确分析它,您将意识到在两种情况下,临时生命的寿命都会延长,直到初始化引用的范围有效为止。一旦引用的范围超出范围,临时文件就无效了。

对于局部常量引用,作用域在一个函数内部,从那里它被初始化为一个临时变量。对于类成员 const 引用,作用域是构造函数,它被初始化为临时值。

您还应该阅读这篇 GOTW 文章:https ://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

const引用类成员是否可以延长临时对象的寿命?

来自分类Dev

为什么const引用不能延长通过函数传递的临时对象的寿命?

来自分类Dev

通过获取对子对象的引用来延长临时对象的寿命

来自分类Dev

延长临时对象的寿命而不复制它

来自分类Dev

延长C ++中临时对象的寿命

来自分类Dev

C ++中的右值引用可延长临时对象的寿命

来自分类Dev

三元运算符,并通过引用常量来延长临时对象的寿命

来自分类Dev

结构化绑定中的const引用是否会延长分解对象的寿命?

来自分类Dev

对临时对象的哪些操作可以防止其寿命延长?

来自分类Dev

为什么我们可以非常量引用一个临时对象并延长其寿命?

来自分类Dev

C ++-使用const引用来延长临时成员,确定成员或UB成员?

来自分类Dev

const引用临时对象的成员

来自分类Dev

引用const临时对象的意外行为

来自分类Dev

返回const引用vs临时对象

来自分类Dev

返回对临时对象成员的const引用

来自分类Dev

* non * -const引用是否可以延长临时人员的生命?

来自分类Dev

延长构造函数外部的QT对象的寿命

来自分类Dev

const引用临时引用

来自分类Dev

关于将const引用绑定到临时对象的子对象

来自分类Dev

为什么临时对象可以绑定到 const 引用?

来自分类Dev

有关const引用和临时对象的问题

来自分类Dev

与const引用关联的临时对象的生命周期(方法链接)

来自分类Dev

如何通过const引用或通过转发模板临时构造对象

来自分类Dev

关于将临时对象传递给const引用

来自分类Dev

返回引用是否也会延长其寿命?

来自分类Dev

为什么PySide的异常处理会延长该对象的寿命?

来自分类Dev

返回对临时对象的引用

来自分类Dev

如何在Rust中延长迭代器适配器内部临时变量的寿命?

来自分类Dev

对指针错误的引用:非常量左值引用“ const * FooBarClass”无法绑定到临时对象

Related 相关文章

  1. 1

    const引用类成员是否可以延长临时对象的寿命?

  2. 2

    为什么const引用不能延长通过函数传递的临时对象的寿命?

  3. 3

    通过获取对子对象的引用来延长临时对象的寿命

  4. 4

    延长临时对象的寿命而不复制它

  5. 5

    延长C ++中临时对象的寿命

  6. 6

    C ++中的右值引用可延长临时对象的寿命

  7. 7

    三元运算符,并通过引用常量来延长临时对象的寿命

  8. 8

    结构化绑定中的const引用是否会延长分解对象的寿命?

  9. 9

    对临时对象的哪些操作可以防止其寿命延长?

  10. 10

    为什么我们可以非常量引用一个临时对象并延长其寿命?

  11. 11

    C ++-使用const引用来延长临时成员,确定成员或UB成员?

  12. 12

    const引用临时对象的成员

  13. 13

    引用const临时对象的意外行为

  14. 14

    返回const引用vs临时对象

  15. 15

    返回对临时对象成员的const引用

  16. 16

    * non * -const引用是否可以延长临时人员的生命?

  17. 17

    延长构造函数外部的QT对象的寿命

  18. 18

    const引用临时引用

  19. 19

    关于将const引用绑定到临时对象的子对象

  20. 20

    为什么临时对象可以绑定到 const 引用?

  21. 21

    有关const引用和临时对象的问题

  22. 22

    与const引用关联的临时对象的生命周期(方法链接)

  23. 23

    如何通过const引用或通过转发模板临时构造对象

  24. 24

    关于将临时对象传递给const引用

  25. 25

    返回引用是否也会延长其寿命?

  26. 26

    为什么PySide的异常处理会延长该对象的寿命?

  27. 27

    返回对临时对象的引用

  28. 28

    如何在Rust中延长迭代器适配器内部临时变量的寿命?

  29. 29

    对指针错误的引用:非常量左值引用“ const * FooBarClass”无法绑定到临时对象

热门标签

归档