3.3.1 通过引用来传递和返回对象
和其他类型的变量一样,对象既可以采用传值方式(pass by value)传递给函数,也可以采用引用方式作为函数的返回值。除非迫不得已,一般来说应该采用引用方式进行对象的传递和返回,而不要采用传值的方式来进行。这是因为通过传值方式来传递和返回对象时会降低效率并将面临对象间的拷贝操作,从而使数据增大,浪费内存。而采用引用方式,则完全可以避免上述弊病。
从效率上看,传递一个指向对象的指针可收到与引用方式相同的效果,但引用方式的语法要简练得多。
例3-14
程序清单3-3 通过传址来传递和返回对象
程序清单3-3使用了传址方式来传送和返回对象。对象c1通过传址而非传值方式从main函数传递给函数f,这就意味着函数f修改的是cl的实际内容,而非cl的一个临时拷贝(译注:若采用传值方式,该临时拷贝在参数赋值时生成)。函数g调用静态对象c3的set成员,然后返回其引用。请务必注意,g返回的是静态对象的引用而不是局部对象的引用,这一点是非常重要的,如果c3是局部对象,那么g返回给调用者(此例中为main)的那个引用将参考到一个已经不存在的对象:
一般来说不要以引用方式在函数中返回一个局部auto变量。