我阅读了有关它的文档,但如果有人能用更简单的英语解释一下,我将不胜感激。
问问题
528 次
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 回答