为什么将第12.2 / 5节中的第二个要点视为本段中明确规定的例外?

Mao

§12.2/ 5(我的重点)

第二种情况是引用绑定到临时项时。引用绑定到的临时对象或引用绑定到的子对象的完整对象的临时对象在引用的生存期内一直存在,以下情况除外

  • 临时绑定到参考...
  • 在函数调用(5.2.2)中,绑定到参考参数的临时绑定将一直持续到包含该调用的完整表达式完成。

在下面的代码片段(实时示例)中,您可以看到A()在引用a的生存期内临时对象已绑定到引用,即在函数~A()的末尾调用了析构函数f

#include <iostream>

struct A{
    A() { std::cout << "A()" << '\n'; }
    ~A() { std::cout << "~A()" << '\n'; }
};

void f(A&& a) { std::cout << "f()" << '\n'; }

int main()
{
    f(A());
}
巴里

考虑这个荒唐的例子:

#include <iostream>

struct A {
    void bar() { std::cout << "bar [" << i << "]" << std::endl; }
    ~A() { std::cout << "dtor" << std::endl; }

    int i;
};

A& foo(A&& a) { return a; }

int main()
{
    foo(A{4}).bar();
}

如果临时对象的生存期没有延长到完整表达式的完成时间,.bar()则将在已经销毁的对象上调用该对象,因为aend的生存期将foo完成结束。就这样,将打印:

bar [4]
dtor

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么J2EE名称中第二个?

来自分类Dev

Go的Syscall()中的第二个r2返回值是什么?

来自分类Dev

将列表中的所有元素插入第二个列表的子列表的特定索引中-python 2

来自分类Dev

将具有2个部分的tableview中的文本转换为第二个视图控制器

来自分类Dev

将2个文件与包含文件1中的数据子集的第二个文件进行比较

来自分类Dev

MinGW将类中对象的第二个声明视为构造函数

来自分类Dev

Yii2 - 在创建新对象时将固定数据保存在第二个表中

来自分类Dev

使用2组不同的数据创建存储过程(将第一个数据中的值用作第二个数据的参数)

来自分类Dev

2 NSTableViews 1 视图控制器。第二个tableview中的单元格没有将数据附加到行

来自分类Dev

从2个数组中获取唯一的数字,第一个方法不起作用,第二个方法不起作用,为什么?

来自分类Dev

为什么FFmpeg会在我的文件中添加第二个字幕,即使我明确只添加了一个字幕呢?

来自分类Dev

使用Bash搜索csv文件中的列,在txt文件中找到它,然后如果找到,则将第1列和第2列从第一个csv输出到第二个csv

来自分类Dev

为什么我的引导程序没有将第二个扇区加载到内存中?

来自分类Dev

Spec2:将第二个参数参数传递给模拟方法调用

来自分类Dev

将2D阵列复制到第二个更大的阵列的中间

来自分类Dev

可以将第二个保存事务t2回滚吗

来自分类Dev

为什么在分页第2页的第二次点击中出现“ InvalidRequest”?

来自分类Dev

在std :: exchange中,为什么第二个模板参数默认?

来自分类Dev

为什么容器中的第二个div没有显示?

来自分类Dev

为什么在Laravel中在href上传递第二个变量非常灵活?

来自分类Dev

为什么此代码中的第二个列表打印三次?

来自分类Dev

为什么在本地存储中未设置第二个<input>值?

来自分类Dev

为什么我的ggplot中没有包含第二个图例?

来自分类Dev

为什么容器中的第二个div没有显示?

来自分类Dev

为什么此代码中的第二个列表打印了三遍?

来自分类Dev

鱼为什么会似乎忽略函数中的第二个“设置”命令?

来自分类Dev

为什么我在 pygame 中的第二个被调用的球闪烁?

来自分类Dev

为什么在列表中获得第二个元组和作为 dict 最快?

来自分类Dev

为什么第二个矩形在我的 SVG 代码中不可见

Related 相关文章

  1. 1

    为什么J2EE名称中第二个?

  2. 2

    Go的Syscall()中的第二个r2返回值是什么?

  3. 3

    将列表中的所有元素插入第二个列表的子列表的特定索引中-python 2

  4. 4

    将具有2个部分的tableview中的文本转换为第二个视图控制器

  5. 5

    将2个文件与包含文件1中的数据子集的第二个文件进行比较

  6. 6

    MinGW将类中对象的第二个声明视为构造函数

  7. 7

    Yii2 - 在创建新对象时将固定数据保存在第二个表中

  8. 8

    使用2组不同的数据创建存储过程(将第一个数据中的值用作第二个数据的参数)

  9. 9

    2 NSTableViews 1 视图控制器。第二个tableview中的单元格没有将数据附加到行

  10. 10

    从2个数组中获取唯一的数字,第一个方法不起作用,第二个方法不起作用,为什么?

  11. 11

    为什么FFmpeg会在我的文件中添加第二个字幕,即使我明确只添加了一个字幕呢?

  12. 12

    使用Bash搜索csv文件中的列,在txt文件中找到它,然后如果找到,则将第1列和第2列从第一个csv输出到第二个csv

  13. 13

    为什么我的引导程序没有将第二个扇区加载到内存中?

  14. 14

    Spec2:将第二个参数参数传递给模拟方法调用

  15. 15

    将2D阵列复制到第二个更大的阵列的中间

  16. 16

    可以将第二个保存事务t2回滚吗

  17. 17

    为什么在分页第2页的第二次点击中出现“ InvalidRequest”?

  18. 18

    在std :: exchange中,为什么第二个模板参数默认?

  19. 19

    为什么容器中的第二个div没有显示?

  20. 20

    为什么在Laravel中在href上传递第二个变量非常灵活?

  21. 21

    为什么此代码中的第二个列表打印三次?

  22. 22

    为什么在本地存储中未设置第二个<input>值?

  23. 23

    为什么我的ggplot中没有包含第二个图例?

  24. 24

    为什么容器中的第二个div没有显示?

  25. 25

    为什么此代码中的第二个列表打印了三遍?

  26. 26

    鱼为什么会似乎忽略函数中的第二个“设置”命令?

  27. 27

    为什么我在 pygame 中的第二个被调用的球闪烁?

  28. 28

    为什么在列表中获得第二个元组和作为 dict 最快?

  29. 29

    为什么第二个矩形在我的 SVG 代码中不可见

热门标签

归档