August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
如何在传值方式、传引用方式和传常量引用方式间进行选择呢?我们先来看第一个例子:
如果你希望改变被传递的对象的值,你应该使用非常量的引用:传值方式传来的是对象的拷贝,而传常量引用方式不允许你修改对象的值。你可以试试下面的程序,观察三种参数传递方式的效果:
因此,如果想改变通过引用方式传递过来的对象的值,你必须传递一个对象。从技术上讲,整型字面常量2只是一个值(右值,rvalue),而不是一个能保存值的对象。而这里函数g()的参数r需要的是一个左值(lvalue),也就是说,可以出现在赋值号左边的内容。
注意,常量引用不需要一个左值,它可以像初始化和传值方式一样进行转换。在上面代码中,当进行最后一次调用g(1,y,3)时发生了什么呢?情况是这样的,编译器为函数g()的参数cr分配了一个整型变量,令cr指向它:
这种编译器生成的对象称为临时对象(temporary object)。
我们的基本原则是:
1.使用传值方式传递非常小的对象。
2.使用传常量引用方式传递你不需修改的大对象。 ...