Итак, у меня есть следующий класс:
class Foo {
public:
Bar &&bar() {
return std::move(_bar);
}
private:
Bar _bar;
}
Я знаю, что этот класс допустимо использовать в следующем контексте:
Bar bar;
{
Foo foo;
bar = foo.bar(); // bar is move-assigned, as foo is still in scope
}
Теперь ситуация Iинтересно, что произойдет, если я напрямую верну bar из метода, не сохраняя его заранее:
Bar testFunc() {
Foo foo;
return foo.bar();
}
Bar test = testFunc();
// is test now valid?
Я думаю, что это должно быть теоретически нормально, так как testFunc
возвращает значение, построенное изЗначение до того, как foo
будет уничтожено - но так ли это, если компилятор применяет оптимизацию возвращаемого значения?
Полагаю, я немного запутался, как именно это работает ...