这段代码的执行顺序能有人解释一下吗?
以下代码打印出
我明白为什么在2之后得到1,因为对象的生命周期绑定在执行代码块上,我也知道rvalue可以绑定到lvalue const引用,但为什么移动对象的析构函数会立即被调用呢?这是什么原因?这个析构函数具体在哪里被调用?
struct Foo {
~Foo() {
std::cout << "1";
}
};
int main() {
const Foo& bar = Foo();
const Foo& baz = std::move(Foo());
std::cout << "2";
}
以下代码打印出
121
。我明白为什么在2之后得到1,因为对象的生命周期绑定在执行代码块上,我也知道rvalue可以绑定到lvalue const引用,但为什么移动对象的析构函数会立即被调用呢?这是什么原因?这个析构函数具体在哪里被调用?
std::move(Foo())
(又称为static_cast<Foo&&>(Foo())
)不是临时对象;将const引用绑定到它上面并不能延长其生命周期。一个右值引用和一个右值不是相同的东西。 - molbdnilobaz
未被使用,但不会抱怨bar
,因为销毁具有副作用,这是一个间接的线索,但并不是一个好的解释:( - Matthieu M.