什么是函数类型的右值引用?

Kos*_*Kos 15 rvalue-reference c++11

我最近关注了C++ 0x的glvalues,xvalues和prvalues以及rvalue引用的概念.然而,有一件事仍然让我失望:

什么是"函数类型的右值引用"?在草稿中多次提到它.为什么要引入这样的概念?有什么用途?

How*_*ant 15

我讨厌是循环的,但函数类型的右值引用是对函数类型的右值引用.有一种功能类型,例如void ().你可以形成一个右值引用.

N3055引入的分类系统而言,它是一个xvalue.

它的用途稀少而且模糊不清,但它并非无用.考虑例如:

void f() {}
...
auto x = std::ref(f);
Run Code Online (Sandbox Code Playgroud)

x 有类型:

std::reference_wrapper<void ()>
Run Code Online (Sandbox Code Playgroud)

如果你看一下reference_wrapper它的概要包括:

reference_wrapper(T&) noexcept;
reference_wrapper(T&&) = delete; // do not bind to temporary objects
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我想你的意思是'void()`.`void()()`是一个错误的GCC/binutils demangling,但是[前一段时间已经修复](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46332). (4认同)
  • @Johannes:谢谢!那是*最有帮助的! (3认同)