传递基本数据类型的值或引用是否更好?

Nav*_*Nav 10 c++ performance reference

可能的重复:
如何将对象传递给C++中的函数?
是否有任何特定的情况,其中pass-by-value比C++中的pass-by-const-reference更受欢迎?

我有一个像这样实现的类的成员:

void aaa(int a, float b, short c)
{
  bbb(a, b);
}

void bbb(int a, float b)
{}
Run Code Online (Sandbox Code Playgroud)

如果a,b和c的值作为常量存储在我的类中,那么使用我的函数如下所示或如上所示更好/更明智吗?

void aaa(int& a, float& b, short& c)
void bbb(int& a, float& b)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,使用引用是否提供任何速度优势或优势?这里引用的任何缺点/开销?

小智 6

Standard对引用的实现没有任何限制,但是通常将它们实现为自动取消引用的指针(实际上有一些例外)。您可能知道,在32位系统指针的大小为4个字节时,这意味着通过引用传递字符,短裤(sizeof()小于4个字节的类型)可能会被认为是过分杀人-使用4个字节而不是1个(字符)或2(短)。通常,这取决于是否使用约束或堆栈来传递参数:在通过值传递基本类型时,您可以节省一点堆栈,但是对于寄存器(即使是char),也将使用4个字节,因此没有意义尝试使用ptrs / refs优化某些内容。

  • 请注意,性能上还有另一个差异:直接使用 int 时,该值存在于寄存器或堆栈中,而在传递引用时(假设自动取消引用指针),必须使用额外的间接寻址来检索实际值,如果按值传递,则没有必要。 (2认同)

Boj*_*zec 6

对于序数类型(即int,float,bool等),使用引用而不是简单地使用按值传递不会节省任何费用。来源 Source2


Bjö*_*lex 5

如果您使用参考文献,请使其const

void bbb(const int & a, const float & b);
Run Code Online (Sandbox Code Playgroud)

否则,语义将与按值传递不同,因为函数可能会更改传递给参数的变量的值。这意味着您不能使用文字作为参数。


归档时间:

查看次数:

7860 次

最近记录:

8 年,4 月 前