Rvalue引用的生存期是多少?

时间:2019-01-04 22:51:51

标签: c++ c++11 lifetime

在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中,该标准是否保证在函数结束之前不会调用析构函数?

0 个答案:

没有答案