首页 > 代码库 > c++的const小总结(3)

c++的const小总结(3)

c++的const小总结(2)

今天来讨论指针或引用的形参与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是无符号类型

我们可以发现:不使用常量引用,在函数使用时会有诸多限制。

在形参不会改变的函数中使用普通引用有两个弊端:

  1. 给函数的使用者一种误导:函数可以修改它的实参的值。
  2. 极大地限制函数所能接受的实参类型。我们不能把const对象、字面值或者需要类型转换的对象传递给普通的引用实参。

今天就整理到这里

 

c++的const小总结(3)