细谈 C++ 返回传值的三种方式:按值返回、按常量引用返回以及按引用返回

一、引言

停滞了很久,最近又开始细细品味起《Data Structure And Algorithm Analysis In C++》这本书了。这本书的第一章即为非常好的 C++11 统领介绍的教材范文,可能对于 C++11 新手来说,作者这样短篇幅的介绍或许有些苍白晦涩,但是对于我这种有一定 C++ 开发经验并且有研读过 《C++ Primer 5th》的人来说,作者这几页简直就是让我对 C++11 的整体脉络有了更加宏观的认识。

话不多说,在之前,我看了这本书的第 1.5.3 节后,总结了一篇博客:
细谈 C++ 传参的四种方式:按值传参、按左值引用传参、按常量引用传参以及按右值引用传参

可以说,我这篇博客里面那种画出来的图(什么时候选择使用哪种传参方式)就是非常精炼的总结。

C++ 除了四种传参方式,其实还有三种返回传值的方式。C++ 的代码为什么这么难以理解,从入参到出参,这都是有一些门门道道的。

同样的,这里,我拿出这本书的第 37 页的一块函数模板的代码,你能解释出来为什么这个 findMax 函数要使用按常量引用的方式返回传值吗:

/**
 * Return the maximum item in array a.
 * Assumes a.size() > 0.
 * Comparable objects must provide operator< and operator=
 */
 template <typename Comparable>
 const Comparable & findMax(const vector<Comparable> & a)
 {
 	int maxIndex = 0;
	for(int i = 0; i < a.size(); ++i)
		if (a[maxIndex] < a[i])
			maxIndex = i;
	return a[maxIndex];
 }

这里以这段代码开篇引言,后面会仔细介绍 C++ 的三种返回传值的方式,以及总结一下什么时候,我们该选择使用哪种返回传值的方式。

ps: 本篇博客大量参考了《Data Structure And Algorithm Analysis In C++》书中的解释和代码。

二、一点碎碎念的讨论

让我们忘掉那么多复杂的概念,我们一起来仔细思考一下,C++

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值