void Subroutine1(int Parameter1)
void Subroutine2(const int &Parameter1)
在 Subroutine1 中,我们需要获取参数的一份副本,而在 Subroutine2 中,则不必进行复制,这可能会节省一些开销。
实际上,Subroutine1 似乎比另一个子程序更常用。这是为什么呢?
void Subroutine1(int Parameter1)
void Subroutine2(const int &Parameter1)
在 Subroutine1 中,我们需要获取参数的一份副本,而在 Subroutine2 中,则不必进行复制,这可能会节省一些开销。
实际上,Subroutine1 似乎比另一个子程序更常用。这是为什么呢?
实际应用中,Subroutine1的使用似乎比其他方法更常见。为什么会这样呢?
因为复制int类型变量要比创建引用(或指针)再访问它要更好。
更普遍地说,所有基本类型都应该按值传递。
因为当你处理原始类型(例如int
)时,按引用传递实际上从性能上来说比按值传递更差。它也没有提供任何优势。
通过引用传递(几乎总是)通过传递指针来实现。这意味着,对于像int
这样的简单类型,第二个版本可能不太高效 - 传递指针的成本与传递简单对象的成本几乎相同,然后函数需要解除该指针的引用。
首先,对于 int 类型,按值传递比按引用传递更快。但对于您自己的类和结构体,按引用传递更快。
这两种方法在原始类型之间的开销差异实际上非常小,在大多数情况下可以忽略不计。
在我看来,对于普通函数来说,原始类型参数的 const 引用是无用的。它使代码有点难以理解,因此不要使用它。
int
,double
,char
)通常较小的情况下,第一种情况通常比第二种情况更快(可访问性)和更便宜。请记住,引用与指针实现方式相似。Parameter1
不会被修改,那么我个人会选择第三种替代方案。void Subroutine3(const int Parameter1);
void Subroutine3(const int Parameter1);
和 void Subroutine3(int Parameter1);
声明了同一个函数,因此在声明(头文件中)中列出您的实现细节是没有必要的。 - UncleBensParameter1
在函数内部同样没有被改变。 - iammilind