1

我阅读了有关它的文档,但如果有人能用更简单的英语解释一下,我将不胜感激。

4

1 回答 1

5

普通的 C++ 引用&是一个奇怪的公民,因为它可以被初始化但不能重新分配。例如:

int a, &ra = a;
int b, &rb = b;
ra = rb; // actually does a = b

而普通指针是一个行为良好的公民,它可以被初始化和重新分配。

因此,它ref()创建reference_wrapper了一个普通指针的包装器。这个包装器可以用一个引用来初始化,它会自动转换为普通的引用&,例如:

int a;
auto ra = std::ref(a); 
int b;
auto rb = std::ref(b);
ra = rb; // now ra contains a pointer to b
int& rb2 = ra; // automatically converts to reference

它主要用于使用 lambda 或std::bind表达式的函数式编程。std::bind复制绑定的参数,所以如果你想将函数参数绑定到引用reference_wrapper就很方便了。例如:

void foo(int);

int i = 1;
auto f = std::bind(foo, i); // makes a copy of i
i = 2;
f(); // calls foo(1)

auto g = std::bind(foo, std::ref(i));
i = 3;
g(); // calls foo(3);
于 2013-04-09T16:50:40.310 回答