1)“传值”需要对象的构造和析构,可能会很耗时。
2)“传值”对于一般对象而言,传递的大小总是大于“传引用”
2)“传值”对于一般对象而言,传递的大小总是大于“传引用”
3)对于小对象,例如int,“传值”会比“传引用”更高效。
其实函数的参数一般程序语言的编译器都是放在 stack 里的
传值就是把值 push 進 stack, 传引用则是把地址 push 入
比如
int a = 3;
fun(a); // 把 a 的值放入堆
fun2(&a); // 把 a 的地址放入堆
在不需要改変参数里的值时, 用传值, 要改変实参数里的值时, 用传引用, 另外如果要传入的是一些比较大的结构数据, 为了效率, 就算不改変其值也会使用传引用的, 因为不用把大量数据拷進堆里
传值时要为实参在栈上分配存储空间,函数调用时对实参复制一份放在这
里。函数体中对形参的一切操作,是对实参在栈上的副本的操作,对原来
的实参没有影响。
传引用时只在栈上为实参分配一个指针的存储空间,函数调用时只把实参
的指针传递进来了(引用实际上是不易出错的指针)。函数体中对形参的
一切操作,就是对实参的操作。
引用主要是解决大对象在传递时构造函数和析构函数的系统开销