use*_*058 47 c++ pass-by-reference pass-by-value pass-by-pointer
一个简单的问题,我在这里找不到答案.
我理解的是,在调用期间将参数传递给函数,例如
void myFunction(type myVariable)
{
}
void main()
{
myFunction(myVariable);
}
Run Code Online (Sandbox Code Playgroud)
对于像int
,float
等等的简单数据类型,函数由值调用.
但是如果myVariable
是数组,则只传递起始地址(即使我们的函数是值函数调用).
如果myVariable
是对象,则也只传递对象的地址,而不是创建副本并传递它.
所以回到这个问题.C++是通过引用还是值传递对象?
Osw*_*ald 38
除非函数签名另行指定,否则参数将按值传递:
void foo(type arg)
,arg
无论type
是简单类型,指针类型还是类类型,都按值传递,void foo(type& arg)
,arg
通过引用传递.对于数组,传递的值是指向数组的第一个元素的指针.如果在编译时知道数组的大小,也可以通过引用传递数组:void foo(type (&arg)[10])
.
小智 16
C++总是为您提供选择:所有类型T
(数组除外,见下文)都可以通过生成参数类型来传递值T
,并通过引用传递参数类型T &
,引用到T
.
如果未将参数类型显式注释为reference(type &myVariable
),则无论特定类型如何,都始终按值传递.对于用户定义的类型(这就是复制构造函数的用途).同样对于指针,即使复制指针也不会复制指向的内容.
数组有点复杂.数组不能通过值传递,参数类型int arr[]
实际上只是不同的语法int *arr
.这不是传递给一个从数组产生指针的函数的行为,实际上每个可能的操作(只排除少数几个sizeof
)就是这样做的.一个可以通过一个参考到一个阵列,但是这明确地标注为参考:int (&myArray)[100]
(注意号).
C ++使得按值传递和按引用传递都成为可能。
您可以在下面找到两个示例用法。
http://www.learncpp.com/cpp-tutorial/72-passing-arguments-by-value/
http://www.learncpp.com/cpp-tutorial/73-passing-arguments-by-reference/
数组是特殊的构造,当您将数组作为参数传递时,指向第一个元素地址的指针将作为值传递,并带有数组中元素的类型。
当您将指针作为参数传递时,您自己就可以实现按引用传递范例,就像在C中一样。因为当您在指定地址中修改对象时,您正是在调用者函数中修改了该对象。
归档时间: |
|
查看次数: |
63201 次 |
最近记录: |