一、引言
停滞了很久,最近又开始细细品味起《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++