发布网友 发布时间:2024-07-03 16:34
共1个回答
热心网友 时间:2024-07-20 08:18
首先,&是类型说明符,而std::ref是一个函数,返回std::reference_wrapper(类似于指针)。
为什么需要std::ref?(std::cref类似)
主要是考虑到c++11中的函数式编程,例如:std::bind。
示例:
#include <iostream>输出:
a = 1
a = 1
a = 2
注意第二行"a = 1",为什么a没有发生改变呢?因为std::bind将参数拷贝了。因而foo改变的是拷贝,不影响a。问题来了:为什么std::bind要拷贝参数,而不是直接保存引用呢?这主要是考虑到调用者的需求。确实存在一些情况,我们并不希望std::bind直接对参数进行操作。为了满足不同的调用者的需求,只能统一进行拷贝。同时,为了可以使用引用,提供了std::ref,std::cref让用户进行选择。此时,用户相当于传入了一个会自动解引用的指针,可以复制,且影响原始参数。