有人可以解释 ref( ) vs & 在 c++11 中以及何时使用它们吗?

Can someone explain ref( ) vs & in c++11 and when to use each?

本文关键字:何时使 c++11 解释 ref vs      更新时间:2023-10-16

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

普通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

它主要用于使用lambdas或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);