必威体育Betway必威体育官网
当前位置:首页 > IT技术

什么时候需要使用引用?使用引用的好处是什么?

时间:2019-08-06 12:19:24来源:IT技术作者:seo实验室小编阅读:65次「手机版」
 

引用的作用


作者:谢之易

链接:https://www.zhihu.com/question/34267829/answer/58414818

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

记忆里《C++ 的设计与演化》一书提过,当初加入“引用”这个语言特性的契机是运算符重载。为了让运算符重载的语法能够更加接近内建的运算符,需要能够让一个函数返回一个左值,通俗的讲就是要能够对一个函数的返回值赋值。

举个例子,假设你想要设计一个类 IntArray 模仿 int 数组,希望支持下面的语法:

IntArray a;
... ...
a[10] = 9527;  // 你想要的效果

显然你需要为 IntArray 增加一个运算符重载,而运算符重载是一个函数,上面你想要的那一句实际上是一个函数调用:

IntArray a;
... ...
a.operator[](10) = 9527;  // 实际的语义(原来这里有个笔误,谢谢 @连小多 的提醒)

这个时候你就得思量一下 operator[] 的返回值是什么。C 语言里只有两个选择,返回 int 或者返回 int*,前者返回出来的是个拷贝,无法赋值,后者的话需要改成 *(a[10]) = xxx,失了语法方便的本意。为了解决这个两难问题,所以加上了引用这个特性。

=== 历史原因交待完毕的分割线 ===

到了今天,引用除了原始用途之外,实际中最主要的用途是以常量引用来修饰函数的输入参数,比如:

void NormalizeBigString(const string& input, string* output) {
  ... ...
}

这里 input 是个输入参数,在函数内部不会被改变,此时用常量引用就是最合适的:一不会在调用函数的时候拷贝一遍 input,二在函数内部使用方便不需要加 *,三从调用函数的地方看过去,NormalizeBigString(string_a, &string_b),单凭语法就能清楚的区分输入和输出参数,可读性更好。

此外,引用常见的用法还有返回内部对象的常量引用:

struct MachineConfig { ... /* 许多许多的配置选项 */ ... }
class FancyMachine {
private:
  Config config_;  // 这台机器的配置选项信息
  ... ...
public:
  // 一能让外界访问配置,二能避免拷贝,三能避免不受控制的配置变化
  const Config& config() { return config_; }
  ... ...
};

相关阅读

淘宝特价版app什么时候出?有什么要求?

互联网不得说不说是改变了人们生活习惯的伟大发明了,现在人们要在网上购物已不单纯的使用电脑来操作了,手机里只接安装应用APP,就可

jQuery on()与off()需要同时使用吗($().off().on()问题

问:发现许多前端代码用jQuery处理绑定事件的时候,没有直接用on()写绑定事件(如:$(#id).on("click",function(){}));而是先用off()来

支付宝行走积分赛在哪里?参赛需要注意什么?

想要保持健康就要多运动,不想跑步那就只能多走路,支付宝新出了行走赛督促大家积极健康行走,每天使用100蚂蚁积分参加行走赛,达标的小

推荐|如何进行产品测试和测试需要注意的问题点

这是一篇来自国外的译文,作者详细介绍了如何测试和测试需要注意的问题点。如果你在做产品设计,你应该做产品的测试。希望这个测试指

国美双十一促销时间是什么时候?有哪些活动?

一年一度的双十一活动就要来了,很多小伙伴都已经准备好清空购物车。今年双十一,除了淘宝天猫京东等电商平台会举办活动以外,国美也会

分享到:

栏目导航

推荐阅读

热门阅读