问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C++已经有了引用操作符&为什么C++11还要引入std:ref

发布网友 发布时间: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>
#include <functional>

void foo(int& a) {
    ++a;
}

void test_function(std::function<void(void)> fun) {
    fun();
}

int main() {
    int a = 1;

    std::cout << "a = " << a << "\n";
    test_function(std::bind(foo, a));
    std::cout << "a = " << a << "\n";
    test_function(std::bind(foo, std::ref(a)));
    std::cout << "a = " << a << "\n";

    return 0;
}

输出:

a = 1
a = 1
a = 2


注意第二行"a = 1",为什么a没有发生改变呢?因为std::bind将参数拷贝了。因而foo改变的是拷贝,不影响a。问题来了:为什么std::bind要拷贝参数,而不是直接保存引用呢?这主要是考虑到调用者的需求。确实存在一些情况,我们并不希望std::bind直接对参数进行操作。为了满足不同的调用者的需求,只能统一进行拷贝。同时,为了可以使用引用,提供了std::ref,std::cref让用户进行选择。此时,用户相当于传入了一个会自动解引用的指针,可以复制,且影响原始参数。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
检察院不批捕取保候审后还会提起诉讼吗 我老公长期在外地工作,每次回来后我们合房的第二天,两个人都觉得特别... 为什么第三次干事,老公不觉得紧,而我也没有那么疼呢,事后觉得有点涨 老公今年才25岁,为什么每次跟我做完爱后就倒头大睡,看起来很累的样子... ...回来就和我做了,做了两次,时间也比以前长,很累,谁知道为什么... 深圳市铭利达精密机械有限公司公司介绍 深圳市宝鑫五金机械厂公司介绍 CNC华明集团企业介绍 华为手机怎么退出talkback模式 华为手机talkback是什么意思_百度... ...开启了一个碰什么都会说那是什么的,这是怎么回事怎么解决? 春季菜谱简单好做的菜 你们怎么用英语说? 什么吸收紫外线 厂里之前交五险现在改成交三险可以这理由解除合同合同吗? 中国女排刘晓彤是刘翔的妹妹吗? 我的电视安装了华数我视界V10 用了一年了,现在打开电视后显示停服升级... 千牛如何查看关键词的数据分析? 蔬菜怎么才能吸收紫外线多一些 千牛如何查看关键词的数据分析? 酒精放盆里直接点燃可以吗 东北石油大学石油工程学院科学研究 仿照例句描写其他季节的景物 "当前网络不稳定,将使用NET网络接入点”是什么意思? 工程造价买什么电脑 工程造价要买什么电脑 请问一下7×几等于72 冬天冻疮,涂药膏好了之后就这样,怎么解决? 水杨酸软膏和地蒽酚软膏和糠酸莫米松乳膏和尿素乳膏在一起用�_百度... ...的雨还会把颜色分给谁呢?仿照例句,用几句话写一下。 仿照例句写一句话,写一写山乡村野的风景。 酒精可以直接点燃吗 杭州师范大学钱江学院专业学费杭州师范大学钱江学院学费多少 讲的近义词 怎样使用生意参谋的选词助手? PA与PE共聚是什么意思 淘宝怎么用生意参谋? 河北农大西校区邮政编码? 植物妈妈有办法里面的近义词? ...in the earthquake这里的lost为什么不用过去式lose 淘宝怎么用生意参谋? 河北农业大学西校区地址在哪? 共聚一堂是什么意思? 被蝎子哲有什么好处 第五人格小女孩金皮怎么样-小女孩金皮恶之源介绍 于梅颗粒能否单独治疗咳嗽痰多的情况? 为什么华为荣耀6手机的收音机不能调频,只能听固定的几个频道?_百度知 ... 什么是小脑共济失调? 怎么把wps中的水印去掉 牛油果可以空腹吃吗 我母亲在锦州铁路大集体退休,有医保,请问能不能在沈阳用医保就医,或 ... 何为豆腐乳原料利用率?