Kos*_*Kos 15 rvalue-reference c++11
我最近关注了C++ 0x的glvalues,xvalues和prvalues以及rvalue引用的概念.然而,有一件事仍然让我失望:
什么是"函数类型的右值引用"?在草稿中多次提到它.为什么要引入这样的概念?有什么用途?
How*_*ant 15
我讨厌是循环的,但函数类型的右值引用是对函数类型的右值引用.有一种功能类型,例如void ().你可以形成一个右值引用.
它的用途稀少而且模糊不清,但它并非无用.考虑例如:
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给构造函数,这种保护也会导致编译时错误.