可能重复:
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)
在这种情况下,使用引用会给出任何速度优势或优势吗?引用的任何缺点/开销都在这里?
答案 0 :(得分:6)
答案 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)
我没有看到为什么会更快的原因。在这两种情况下,您都需要将参数发送到函数。如果函数获取指针而不是值,则指针需要解引用,这可能比发送普通值慢。