c++11 - 什么是函数类型的右值引用?

标签 c++11 rvalue-reference

我最近开始思考 C++0x 的左值、xvalue 和 prvalue 的概念,以及右值引用。然而,有一件事情仍然让我难以理解:

什么是 “对函数类型的右值引用” ?它在草案中多次提到。为什么要引入这样一个概念?它有什么用途?

最佳答案

我讨厌循环,但对函数类型的右值引用是对函数类型的右值引用。有一个函数类型这样的东西,例如void () .你可以对它形成一个右值引用。

N3055介绍的分类系统方面,它是一个 xvalue。

它的用途很少见且晦涩难懂,但并非毫无用处。考虑例如:

void f() {}
...
auto x = std::ref(f);
x有类型:
std::reference_wrapper<void ()>

如果您查看 reference_wrapper 的概要这包括:
reference_wrapper(T&) noexcept;
reference_wrapper(T&&) = delete; // do not bind to temporary objects

在这个例子中 T是函数类型 void () .因此,第二个声明形成了对函数类型的右值引用,以确保 reference_wrapper不能用右值参数构造。即使T也不行是常量。

如果形成对函数的右值引用是不合法的,那么即使我们没有传递右值 T,这种保护也会导致编译时错误。到构造函数。

关于c++11 - 什么是函数类型的右值引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7016777/

相关文章:

c++ - 在可变扩展中排序

c++ - 为什么与花括号分隔的初始化程序一起使用的缩小转换不会导致错误?

lambda - C++0x 闭包的未定义行为 : II

c++ - 内联数组初始化

c++ - 当左值传递给 T&& 时,会发生什么?

c++ - 不同的智能指针可以引用同一个对象吗?

c++ - 如何获得对右值的引用?

c++ - 构建复合对象时消除不必要的拷贝

c++ - 在重载函数的函数参数中使用右值引用会创建太多组合

c++ - C++ 中的右值引用延长了临时对象的生命周期