1.4参数传递与返回值(1)
继续分析complex类
const member functions(常量成员函数)
上图类中的函数:
double real () const {return re;}
double imag () const {return im;}
以上两个类中的函数不改变类中的成员data变量,所以加const。
Note:不会改变类中的数据内容的函数,马上加上const。
有const修饰real函数和imag函数时,以下两种情况均可。
第二种情况为定义了一个const对象,表明该对象的data是不可改变的。
但是无const修饰的real函数和imag函数时,第二种情况创建对象时使用const了,表明创建的对象的data不可以改变;但是调用的无const修饰的real函数和imag函数表明real函数和imag函数可能会改data,前后矛盾,编译器会报错。 所以在函数不改变data时,切记加上const。
·参数传递: pass by value vs. pass by reference (to const)
尽量不要使用pass by value(传值)。
pass by reference(传引用):相当于传指针,引用在底层就是一个指针(C中可以传指针(即地址)),指针和引用在底层的实现是一样的。
pass by reference to const:
上图中黄色部分参数中const complex&,&表明pass by reference,加上const 表明 pass by reference to const,const 限制不可以改变引用所指向的data,如果改变,则编译出错。
pass by reference:
上图中黄色部分参数中ostream& 表明pass by reference,无const,表明该参数所在函数会对传进来的参数做改变,不然的话应该加const。
pass by value: value多大就整个传多大,将value压到栈中。
上图中黄色部分参数中double 没有&表明是pass by value。
NOTE:建立一个良好的习惯,所有的参数传递都尽量 pass by reference,尽量不要pass by value。
当然细节上如果传递value时,传递使用的存储空间小于传递引用使用的存储空间时,还是选择pass by value。
结论: 参数传递尽量都传引用,当传递的数据所占存储空间很小时,可以选择传值。