T为一个类名.
1.void f(T x) 按值传递
:调用函数时,产生一个x的副本,函数中修改x副本的值不会修改x的值;
优点:安全,可以防止参数X在函数中不小心被修改
缺点:1.调用f函数时,因为要产生一个副本,所有要调用T类的构造函数。
2.f函数结束时,又要调用T类的析构函数
若T类是一个大型类会非常耗时,降低效率。
3.若有时对象不允许被复制(有时复制对象操作仅限于特权用户或被禁止【此处可能是把复制对象的函数放在private中声明】)
2.void f(const T x) 按值传递
有上面一个的所有优缺点
特别之处:因为x被声明为const对象所以x的副本在f函数中不能被修改.
3.void f(T& x) 按引用传递
优点:可以直接对x进行写入和读取
缺点:若x在函数中被销毁,函数外有存有x地址的变量,在调用x时,会导致程序崩溃.
(在多线程环境中,这种方式是十分危险的)
4.void f(const T& x) 按引用传递
优点和3例一样。
特别之处:此方法x只能被读取,不能被修改.(在传递大型对象是,此传递方法强烈推荐)
5.void f(T* x) 按指针传递
在调用函数时,产生一个指向x的指针(4字节大小,几乎可以忽略不计).
优点:可以直接修改x.
缺点:若在函数中销毁x,会产生主函数的指针悬挂.
特别注意:若函数中的x改变所指对象,不会改变函数外x所指的内容.
指针有空指针(即NULL或0)
所以最好 void f(T* x=0)
提醒即使把空指针传递给函数也不会有问题
6.void f(const T* x) 按指针传递
优点只能对x进行读取.
7.void f(T* const x)
可以对x进行读取和写入,但是不能移动指针。
8.void f(const T*const x)