今天来讨论指针或引用的形参与const的关系。
首先说明:c++里规定同名函数中参数必须有明显区别。
例如void reset(int &i) 和 void reset(const int &i)这样的同名函数是通不过编译的。
int i = 0; const int ci = i; string::size_type ctr = 0; reset(&i); reset(&ci); //错误,不能用指向const int对象的指针初始化int* reset(i); reset(ci); //错误,不能把普通引用绑定在const对象ci上 reset(42); //错误,不能把普通引用绑定在字面值上 reset(ctr); //错误,类型不匹配,str是无符号类型
我们可以发现:不使用常量引用,在函数使用时会有诸多限制。
在形参不会改变的函数中使用普通引用有两个弊端:
- 给函数的使用者一种误导:函数可以修改它的实参的值。
- 极大地限制函数所能接受的实参类型。我们不能把const对象、字面值或者需要类型转换的对象传递给普通的引用实参。
今天就整理到这里
时间: 2024-10-27 13:03:02