开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第11天,点击查看活动详情
6.2.1 传值参数
当初始化一个非引用类型的变量时,初始值拷贝给变量,此时对变量的改变不会影响实参。
指针形参,当执行拷贝操作时,拷贝的是指针的值,这一点和非引用类型一致。拷贝后就是两个不同的指针,不过此时我们可以通过拷贝指针间接修改它所指向的对象
6.2.2 传引用参数
使用引用可以避免拷贝
拷贝大的类类型对象或者容器对象比较低效,甚至有的类类型就不支持拷贝操作。当类型不支持拷贝操作时,函数只能通过引用形参访问该类型的对象。
注意: 当函数无需改变引用形参的值,最好将其声明为常量引用
使用引用形参返回额外信息
一个函数只能返回一个值,如果需要同时返回多个值,此时可以考虑引用形参
string::size_type find_char(const string &s, char c, string::size_sype &occurs)//occurs用作返回次数
6.2.3 const形参和实参
实参初始化形参时会忽略顶层const(毕竟常量是可以初始化一个变量的)
void f(const int i) {}
void f(int i) {} //err 重复定义
尽量使用常量引用
1、把函数不会改变的形参定义成(普通)引用是一种比较常见的错误,因为这样会给函数的调用者一个误导,即函数可以修改它的实参的值。
2、使用普通引用也会极大地限制函数所能接受的实参类型。例如:不可以把const对象、字面值或者需要类型转换的对象传递给普通的引用形参
注意:标准库类型vector表示对象的集合。vector是一个类模板,模板本身不是类或函数,相反可以将模板看成编译器生成类或函数编写的一份说明。编译器根据模板创建类或函数的过程称为实例化。
警告:对于某些编译器可能仍需要老实声明来处理vector的vector对象,如vector<vector<int> >