为什么我可以使用int构造函数将int绑定到类的引用?

蒂姆·MB

这段代码在VS2013和Ideone.com(http://ideone.com/g9P8J7中都可以正常编译

#include <list>
#include <iostream>
#include <ostream>

class Foo
{
public:
    Foo(int x_ = -1) : x(x_), y(-2.3f) {}
    int x;
    float y;
};

int main()
{
    std::list<int> myList;
    myList.push_back(0);
    for (auto it = std::begin(myList); it != std::end(myList); ++it)
    {
        Foo const& c = *it;
        std::cout << c.x << ' ' << c.y << std::endl;
        // output: 0 -2.3
    }
}

给定输出后,似乎intmyList会通过int构造函数隐式转换为Foo实例,然后将其绑定到引用变量c但是这个物体住在哪里?如果是临时的,那么为什么它在下一行仍然有效?

P0W

在此,临时对象的寿命会随着初始化引用而延长。

从标准

§12.2/ 4

在两种情况下,临时变量会在与全表达式结尾不同的时间点被销毁。第一个上下文是表达式作为定义对象的声明程序的初始化程序出现时。[...]

§12.2/ 5

第二种情况是引用绑定到临时。[...]时

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以使用Ninject将布尔值绑定到命名构造函数值

来自分类Dev

为什么我可以在C ++中使用for循环将右值绑定到非const引用?

来自分类Dev

为什么我的程序不能使用float变量,但是可以使用int变量?

来自分类Dev

为什么我可以取消引用并修改`int * const`指针?

来自分类Dev

为什么我们不能使用GetConstructor找到Int32的默认构造函数?

来自分类Dev

为什么要使用小数(int [])构造函数?

来自分类Dev

为什么可以将右值间接绑定到左值引用,而不能直接绑定呢?

来自分类Dev

“引用只能绑定到对象”,为什么是“ const int&ref = 3;” 有效的?

来自分类Dev

为什么不允许将右值引用绑定到非const引用,但是却可以在一个对象上调用非const成员函数

来自分类Dev

我可以使用常量定义数组的长度,那么int d [b]为什么不起作用?

来自分类Dev

为什么我可以使用基础对象(非虚拟)调用派生类中定义的函数?

来自分类Dev

为什么即使不导出也可以使用值构造函数?

来自分类Dev

为什么可以使用此“私有”值构造函数?

来自分类Dev

为什么我可以将字符串值插入到 python sqlite 数据库的 int 列中

来自分类Dev

为什么Javascript类引用相同的构造函数?

来自分类Dev

为什么我可以使用/ dev?

来自分类Dev

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

来自分类Dev

通过引用将int数组传递给构造函数

来自分类Dev

为什么我的函数的返回类型是 a -> Int

来自分类Dev

为什么在调用构造函数时将int隐式转换为float而不是double?

来自分类Dev

为什么我可以将函数引用分配给匿名函数指针变量?

来自分类Dev

为什么我得到一个“在实体类上找不到属性节点……绑定构造函数参数!” 使用Spring Data MongoDB

来自分类Dev

为什么汇编程序可以使用CALL时使用INT指令?

来自分类Dev

为什么抽象类可以有构造函数?

来自分类Dev

为什么我可以将表单绑定到$ index,但不能插入名称?

来自分类Dev

为什么我可以将表单绑定到$ index,但不能插值名称呢?

来自分类Dev

为什么 eval 类给我一个从 int 到 double 的转换错误?

来自分类Dev

为什么我的类字段在构造函数中被破坏

来自分类Dev

为什么我的类构造函数被重复调用?

Related 相关文章

  1. 1

    我可以使用Ninject将布尔值绑定到命名构造函数值

  2. 2

    为什么我可以在C ++中使用for循环将右值绑定到非const引用?

  3. 3

    为什么我的程序不能使用float变量,但是可以使用int变量?

  4. 4

    为什么我可以取消引用并修改`int * const`指针?

  5. 5

    为什么我们不能使用GetConstructor找到Int32的默认构造函数?

  6. 6

    为什么要使用小数(int [])构造函数?

  7. 7

    为什么可以将右值间接绑定到左值引用,而不能直接绑定呢?

  8. 8

    “引用只能绑定到对象”,为什么是“ const int&ref = 3;” 有效的?

  9. 9

    为什么不允许将右值引用绑定到非const引用,但是却可以在一个对象上调用非const成员函数

  10. 10

    我可以使用常量定义数组的长度,那么int d [b]为什么不起作用?

  11. 11

    为什么我可以使用基础对象(非虚拟)调用派生类中定义的函数?

  12. 12

    为什么即使不导出也可以使用值构造函数?

  13. 13

    为什么可以使用此“私有”值构造函数?

  14. 14

    为什么我可以将字符串值插入到 python sqlite 数据库的 int 列中

  15. 15

    为什么Javascript类引用相同的构造函数?

  16. 16

    为什么我可以使用/ dev?

  17. 17

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

  18. 18

    通过引用将int数组传递给构造函数

  19. 19

    为什么我的函数的返回类型是 a -> Int

  20. 20

    为什么在调用构造函数时将int隐式转换为float而不是double?

  21. 21

    为什么我可以将函数引用分配给匿名函数指针变量?

  22. 22

    为什么我得到一个“在实体类上找不到属性节点……绑定构造函数参数!” 使用Spring Data MongoDB

  23. 23

    为什么汇编程序可以使用CALL时使用INT指令?

  24. 24

    为什么抽象类可以有构造函数?

  25. 25

    为什么我可以将表单绑定到$ index,但不能插入名称?

  26. 26

    为什么我可以将表单绑定到$ index,但不能插值名称呢?

  27. 27

    为什么 eval 类给我一个从 int 到 double 的转换错误?

  28. 28

    为什么我的类字段在构造函数中被破坏

  29. 29

    为什么我的类构造函数被重复调用?

热门标签

归档