像这样的返回类型在 C++11 中是否代表某种有意义的东西?
template <typename R>
R&& grabStuff();
T instance = grabStuff<T>();
如果 R
没有移动构造函数,我希望 grabStuff
应该抛出编译时错误,因为这似乎不允许返回类型使用拷贝构造函数
最佳答案
与往常一样,在返回引用时,您必须返回对函数返回后仍然存在的对象的引用。你如何做到这一点取决于你。示例:
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());
}
不过,返回右值引用的更典型示例是 std::move
本身,它返回对您传递给它的东西的引用 (因此它是调用者有责任提供有效的输入)。
关于c++ - 右值引用返回类型语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10154963/