21

这真的让我很烦,来自 C# 背景。

有时,我会看到这样写的函数:

int computeResult();

这是我习惯的。但后来我看到它们是这样写的:

void computeResult(int &result);

我觉得这很奇怪。如果有的话,第二种方法比第一种方法有什么好处?一定有什么,因为我经常看到。

4

1 回答 1

20

此类非常量引用参数有两个常见原因:

  • 您可能需要在一个函数中使用多个“out”参数,并且使用引用参数可以做到这一点。

  • 您的对象复制起来可能很昂贵,因此您传入一个将被变异的引用,而不是返回一个可能会作为返回过程的一部分被复制的对象。昂贵的复制对象可能包括标准容器(如vector)和管理堆内存的对象,其中会发生分配-复制-解除分配序列。请注意,编译器在可能的情况下非常擅长优化这些副本,因此这个原因的导入量比以前少了。

编辑:我应该澄清,即使在 C++ 中,您提供的带有单个内置类型引用参数的特定示例也非常不典型。在这种情况下,返回值几乎总是首选。

于 2012-08-23T01:15:59.957 回答