参数传递模式

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)

原文地址:https://www.cnblogs.com/zhengzhe/p/6485703.html