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

时间:2010-11-06 11:30:51

标签: c++ performance reference

  

可能重复:
  How to pass objects to functions in C++?
  is there any specific case where pass-by-value is preferred over pass-by-const-reference in C++?

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

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

void bbb(int a, float b)
{}

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

void aaa(int& a, float& b, short& c)
void bbb(int& a, float& b)

在这种情况下,使用引用会给出任何速度优势或优势吗?引用的任何缺点/开销都在这里?

4 个答案:

答案 0 :(得分:6)

在序数类型的情况下 - 即int,float,bool等 - 使用引用而不是简单地使用pass by value没有节省。 Source Source2

答案 1 :(得分:5)

Standard没有关于引用实现的约束,但通常它们被实现为自动引用指针(实际上有一些例外)。您可能知道,在32位系统指针大小为4个字节时,这意味着通过引用传递字符,短路(sizeof()小于4个字节的类型)可能被认为有点过度 - 使用4个字节而不是1个(字符)或2(短)。 一般来说,它取决于rigisters或stack是否用于传递参数:你可以在按值传递基本类型时保存一些堆栈,但是如果寄存器甚至是chars,则会使用4个字节,所以没有任何意义试图用ptrs / refs来优化某些东西。

答案 2 :(得分:3)

如果您使用引用,请将它们const

void bbb(const int & a, const float & b);

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

答案 3 :(得分:1)

我没有看到为什么会更快的原因。在这两种情况下,您都需要将参数发送到函数。如果函数获取指针而不是值,则指针需要解引用,这可能比发送普通值慢。