这真是让我烦恼,来自C#背景。
有时,我看到这样写的函数:
int computeResult();
这就是我习惯的。但后来我看到它们写得像这样:
void computeResult(int &result);
我发现这很奇怪。如果有的话,第二种方法对第一种方法有什么好处呢?必须有一些东西,因为我一直都在看。
答案 0 :(得分:17)
此类非const参考参数有两个常见原因:
您可能需要在函数中使用多个“out”参数,并且使用参考参数可以实现此目的。
您的对象复制起来可能很昂贵,因此您传入一个将被改变的引用,而不是返回可能作为返回过程的一部分被复制的对象。昂贵的复制对象可能包括标准容器(如vector
)和管理堆内存的对象,其中将发生分配 - 复制 - 释放序列。请注意,编译器在可能的情况下非常擅长优化这些副本,因此这个原因的重要性比以前少。
编辑:我应该澄清,即使在C ++中,您提供的单个内置类型引用参数的具体示例也非常不典型。在这种情况下,返回值几乎总是首选。