将const&variable传递给函数而不是变量

时间:2019-01-12 02:05:24

标签: c++

为什么有很多人将const&variable传递给函数而不是变量?我认为它给出了相同的结果,不是吗?

//For example many people use this:
int add(const int &a, const int &b)
{
    return a+b;
}

//instead of this:
int add(int a, int b)
{
    return a+b;
}

1 个答案:

答案 0 :(得分:0)

因为有人通过引用而不是新对象为您提供参数。

因此,您可以存储参考供以后使用。如果稍后通过参数传递的对象被修改,则存储的引用将为您提供修改后的值。如果您按值传递,则原始对象的副本将与原始对象完全分离。


此外,因为这样可以避免复制引用的对象。

对于小型的,可复制的类型(如int),间接寻址比副本昂贵(),因此它毫无意义,但对于动态数据结构(如映射和字符串,这带来了很大的不同。

此外,某些类类型是不可复制的,因此您不能选择按值传递它们。

然后是实现复制构造函数的情况。您必须按引用传递,因为如果您按值传递,则必须复制参数,因此必须调用复制构造函数,因此必须复制参数,因此必须调用复制构造函数,所以... ad infinitum。

尽管它可能会产生边际差异,并且如果函数是内联展开的,则没有任何区别。