我正在试图理解C++中的生命周期延长保证。有人能否解释一下为什么在以下不同类型的括号使用下,临时对象析构函数被调用的时间会产生不同的结果?
#include <iostream>
struct X {
X() {
std::cout << __PRETTY_FUNCTION__ <<"\n";
}
~X() {
std::cout << __PRETTY_FUNCTION__ <<"\n";
}
};
struct Y {
X &&y;
};
int main() {
Y y1(X{});
std::cout << "Here1\n";
Y y2{X{}};
std::cout << "Here2\n";
}
输出
X::X()
X::~X()
Here1
X::X()
Here2
X::~X()