码迷,mamicode.com
首页 > 其他好文 > 详细

参数传递模式

时间:2017-03-01 19:39:27      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:产生   传递   空指针   变量   特权   指针   线程   指针传递   参数传递   

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)

 

参数传递模式

标签:产生   传递   空指针   变量   特权   指针   线程   指针传递   参数传递   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!