重读C++ prime有感(1)-指针和引用参数(转
2011-05-07 20:19
260 查看
大口木瓜 2009年08月15日 16:54 阅读(7) 评论(0) 分类:程序设计 权限: 公开
两种参数都允许函数修改实参所对应的对象,两种类型的参数都允许有效得向函数传递大型类对象。
两者在参数传递过程中,有如下几点不同:
(1)引用必须被初始化为指向一个对象,一旦初始化了,它就不能在指向其它对象。指针可以指向一系列不同的对象,当然也可以定义为NULL;
如:
所以在函数中,一个参数可能指向不同的对象的情况,或者这个参数可能不指向任何对象,则必须实用指针参数。
(2)引用参数的一个重要用法,它允许我们在有效实现重载操作符的同时,还能保证用法的直观性。如下例:
通过上面实现后,就能够支持两个Matrix对象的加法,如:a+b
但是这样做,效率会非常低。因为该实现的实参是按值传递,两个Matrix对象相加的时候,内容被拷贝到operator+()函数的参数区中,因为Matrix对象非常大的时候,分配这样一个对象,并把它拷贝到函数参数区中的时间和空间开销比较高。
而为了提高我们的操作符函数的效率,假定我们决定把参数申明为指针的时候,如下:
这种做法,在一定程度上很好得解决了函数实现的效率问题,但是带来一个新的问题是用户的使用习惯,对于这样的operator+操作,调用方式变为:&a+&b,这样大大颠覆了我们传统的调用方式。
所以这时候,如果申明为引用的方式,就能到达到效率和使用习惯的目的:
两种参数都允许函数修改实参所对应的对象,两种类型的参数都允许有效得向函数传递大型类对象。
两者在参数传递过程中,有如下几点不同:
(1)引用必须被初始化为指向一个对象,一旦初始化了,它就不能在指向其它对象。指针可以指向一系列不同的对象,当然也可以定义为NULL;
如:
calss Type{ void operation(const Type&p1,const Type&p2); int main(){ Tyoe obj1; Type obj2 = operation(obj1,0); //引用参数的实参不能为0 }
所以在函数中,一个参数可能指向不同的对象的情况,或者这个参数可能不指向任何对象,则必须实用指针参数。
(2)引用参数的一个重要用法,它允许我们在有效实现重载操作符的同时,还能保证用法的直观性。如下例:
Matrix operator+(Matrix m1,Matrix m2) { Matrix result; //do computation return result; }
通过上面实现后,就能够支持两个Matrix对象的加法,如:a+b
但是这样做,效率会非常低。因为该实现的实参是按值传递,两个Matrix对象相加的时候,内容被拷贝到operator+()函数的参数区中,因为Matrix对象非常大的时候,分配这样一个对象,并把它拷贝到函数参数区中的时间和空间开销比较高。
而为了提高我们的操作符函数的效率,假定我们决定把参数申明为指针的时候,如下:
Matrix operator+(Matrix *m1,Matrix *m2) { Matrix result; //do computation return result; }
这种做法,在一定程度上很好得解决了函数实现的效率问题,但是带来一个新的问题是用户的使用习惯,对于这样的operator+操作,调用方式变为:&a+&b,这样大大颠覆了我们传统的调用方式。
所以这时候,如果申明为引用的方式,就能到达到效率和使用习惯的目的:
Matrix operator+(Matrix &m1,Matrix &m2) { Matrix result; //do computation return result; }
相关文章推荐
- C++学习扎记(二)重读〈C++指针 指针入门〉一文
- C++ Prime学习笔记之this指针
- 《C++ Prime Plus 第七章》—数组、函数、指针初步
- C++primeer 6.7节练习(函数指针,函数指针形参)
- C++的三种传递参数到函数的方法:按值传递,用引用参数按引用传递,用指针参数按引用传递
- C++ Prime Plus 学习有感
- 《C++ Prime Plus 第七章》—指针和const
- C++ Prime:指针
- C++ Prime:指针和const
- 二、C++指针存储结构
- C++中指针与引用的区别
- C++成员函数指针的应用
- C++从入门到精通实例--指针
- java中的引用和C++中的指针的区别
- C/C++(字符串处理)字符指针、字符数组用法大总结
- C/C++中指针和引用之相关问题研究C/C++
- C/C++数组名与指针区别深入探索(转载)
- C++:指向数组的智能指针scoped_array组件的使用
- C++ 引用 解引用 取地址 指针 双指针 指针的引用 二级指针
- C++中的常量、引用和指针