gpt4 book ai didi

c++ - 为什么我可以将 int 绑定(bind)到具有 int 构造函数的类的引用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:25:59 26 4
gpt4 key购买 nike

此代码在 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
}
}

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

最佳答案

it seems like the int from myList is being implicitly converted into a Foo instance via the int constructor, which is then being bound to the reference variable c.

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

But where does this object live?

未指定,但它必须表现得像一个与引用具有相同作用域的自动变量,所以可能在堆栈上就像一个自动变量。

If it's a temporary then why is it still valid on the next line?

因为一个晦涩的规则会导致临时对象的生命周期被延长,如果它被用来初始化一个const 引用。它的生命周期被延长以匹配引用。

关于c++ - 为什么我可以将 int 绑定(bind)到具有 int 构造函数的类的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27131378/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com