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

Tim*_* MB 1 c++ reference

此代码在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
    }
}
Run Code Online (Sandbox Code Playgroud)

给定输出,似乎int from myList通过int构造函数隐式转换为Foo实例,然后绑定到引用变量c.但是这个对象住在哪里?如果它是暂时的,为什么它在下一行仍然有效?

Mik*_*our 5

似乎int from myList通过int构造函数隐式转换为Foo实例,然后绑定到引用变量c.

是的,这正是发生的事情.

但是这个对象住在哪里?

未指定,但它必须表现得像一个与引用具有相同范围的自动变量,因此可能在堆栈上就像一个自动变量.

如果它是暂时的,为什么它在下一行仍然有效?

因为如果用于初始化const引用,则不明确的规则会导致临时的生命周期延长.它的寿命延长到与参考相匹配.