我最近开始思考 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/