在C ++中,您不能为返回值的表达式分配引用。
int & ref = 10 + 10; //Error
但是,我注意到,您可以为返回值的表达式分配Rvalue:
int && Rref = 10 + 10; //This is ok
Rref
的生存期是否会延长到作用域末尾,或者是否正在使用Rref
未定义的行为?
在一个稍微复杂的示例中,让我们使用一个具有非平凡的构造函数和析构函数的类。它管理着指向其他东西的指针。
//These are defined somewhere else
struct State;
State* makeState() noexcept;
void transformState(State*) noexcept;
void cleanState(State*) noexcept;
//Creates a state and cleans up the state at the end
struct Blitz {
State* state;
Blitz() {
state = makeState();
}
~Blitz() {
cleanState(state);
}
};
void dostuff() {
auto&& myBlitz = Blitz();
transformState(myBlitz.state);
}
在函数dostuff
中,该标准是否保证在函数结束之前不会调用析构函数?