c++ - 右值引用返回类型语义?

标签 c++ c++11 rvalue-reference

像这样的返回类型在 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/

相关文章:

c++ - 为什么我必须写 std::cout 而不是 std::<<

c++ - 从此指针复制后尝试访问基类的成员时出现段错误

c++ - Armadillo 是否支持 bool 和 8 位类型的矩阵和立方体?

C++:我的右值在哪里?

c++ - 与成员函数中的 std::move(*this) 的行为差异

c++ - 我如何使用 goto 来执行文件任务而不是使用函数?

c++ - QTreeWidget 中的垂直行间距

c++ - 为什么这个 while 循环在输入的每个字符之后重复?

c++ - 根据提案 n4015 实现 expected<E, T>

c++ - 了解右值引用