r值引用返回类型语义?

lur*_*her 8 c++ rvalue-reference c++11

像这样的返回类型是否代表c ++ 11中有意义的东西?

template <typename R>
R&& grabStuff();

T instance = grabStuff<T>();
Run Code Online (Sandbox Code Playgroud)

grabStuff如果R没有移动构造函数,我希望应该抛出编译时错误,因为这似乎不允许返回类型使用复制构造函数

Ker*_* SB 6

与往常一样,当返回引用时,您必须返回对函数返回后仍然存活的内容的引用.你如何做到这一点取决于你.例:

T global_thing;

T && get() { return std::move(global_thing); }

struct Foo { Foo(T &&); /* ... */ };

int main()
{
    global_thing.reset();
    Foo a(get());
    global_thing.reset();
    Foo b(get());
}
Run Code Online (Sandbox Code Playgroud)

然而,返回rvalue引用的更典型示例std::move本身就是返回对传递它的事物的引用(因此调用者有责任提供有效的输入).