C ++是否通过值或引用传递对象?

一个简单的问题,我在这里找不到答案。

我所理解的是,在调用过程中将一个parameter passing给一个函数,例如

void myFunction(type myVariable) { } void main() { myFunction(myVariable); } 

对于像intfloat等简单的数据types,函数是通过值调用的。

但是,如果myVariable是一个数组,只有起始地址被传递(尽pipe我们的函数是通过值函数调用的)。

如果myVariable是一个对象,也只传递该对象的地址,而不是创build一个副本并传递它。

所以回到这个问题。 C ++是否通过引用或值传递一个对象?

参数是通过值传递的,除非函数签名另外指定:

  • void foo(type arg)arg是按值传递的,无论type是简单types,指针types还是类types,
  • void foo(type& arg)arg通过引用传递。

在数组的情况下,传递的值是一个指向数组的第一个元素的指针。 如果您在编译时知道数组的大小,则可以通过引用传递一个数组: void foo(type (&arg)[10])

C ++总是给出你的select: 所有typesT (除了数组,参见下面)可以通过使参数types为T传递,并通过使参数types为T & ,reference-to来传递。

当参数types没有被显式注释为引用( type &myVariable )时,它总是按值传递,而不pipe具体的types如何。 对于用户定义的types(这就是复制构造函数的用途)。 另外对于指针,即使复制指针也不会复制指向的内容。

数组有点复杂。 数组不能通过值传递,像int arr[]这样的参数types实际上只是int *arr不同语法。 这不是传递给一个从数组中产生指针的函数的行为,实际上每一个可能的操作(不包括像sizeof这样的less数几个)都是这样做的 。 可以传递一个引用到数组,但是明确地注释为引用: int (&myArray)[100] (注意&符号)。

C ++使得通过值传递和通过引用范例传递成为可能。

您可以在下面find两个示例用法。

http://www.learncpp.com/cpp-tutorial/72-passing-arguments-by-value/

http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/

数组是特殊的结构,当你传递一个数组作为参数时,指向第一个元素的地址的指针作为值传递给数组中的元素的types。

当你传递一个指针作为参数时,你自己实现了通过引用范例,就像在C中一样。因为当你修改指定地址中的对象时,你完全修改了调用者函数中的对象。

C ++根据值传递无指针(int *)或引用(int&)的参数。 你不能在被调用的函数中修改调用块的var。 数组是指针。