普通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 次 |
最近记录: |