普通C++引用&是一个奇怪的公民,因为它可以初始化但不能重新分配.例如:
int a, &ra = a;
int b, &rb = b;
ra = rb; // actually does a = b
Run Code Online (Sandbox Code Playgroud)
普通指针是一个表现良好的公民,它可以被初始化和重新分配.
因此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
Run Code Online (Sandbox Code Playgroud)
它主要用于使用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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
499 次 |
| 最近记录: |