C ++有myMethod(Thing& a)还是myMethod(Thing a)之间的确切区别?

时间:2010-04-24 20:58:54

标签: c++

拥有myMethod(Thing& a)或myMethod(Thing a)之间的确切区别是什么?因为以后你仍然需要使用& a如果你想要对象的地址..我不知道什么时候使用什么..

3 个答案:

答案 0 :(得分:4)

在第一种情况下,您只是将引用传递给单个对象,在第二种情况下,您传递的是对象的副本。

答案 1 :(得分:2)

三个不同之处:

  1. 使用引用,您有一个“共享”实例。因此,如果您修改a,则更改原文,反之亦然。
  2. 性能。使用Thing a,您可以调用复制构造函数。如果复制构造函数必须做很多事情,那么可能会影响代码运行的速度。
  3. 保证参考有效。如果该类具有私有拷贝构造函数,您将无法执行Thing a,但您始终可以执行Thing &a
  4. 最后,如果您不打算让调用者能够更改底层对象,那么您应该通过const引用(const Thing &a

答案 2 :(得分:0)

第二个创建对象的引用,因此这两行代码是相同的:

void addOne(int &a){
    a++;
}

void addOne(int *a){
    (*a)++;
}

有和没有&amp;的区别如果没有它,你的变量将被复制(并且你在函数中使用它做的任何事情都将被忽略),并且使用&amp ;,你对函数内部变量所做的任何事情都将在函数之外应用。< / p>