C++ primer学习之const限定符(2)

上节说了const限定符在定义一个变量方面的应用,这一个我们来看看const限定符在函数里面的应用。

const形参与实参
按照我们前面的定义:

const int ci =42; //我们不能改变的值
void fun(const int i); { /* fun能够读取i,但是不能向i写值*/}
void fun(int i); /*错误,c++中不允许有两个同样的函数存在*/

在我们调用fun时,既可以传入const int,也可以传入i。c++中,我们允许定义若干相同名字的函数,不过前提是不同函数的形参列表应该用明显的区别。而在上述代码中传入两个fun函数的参数可以完全一样,因此第二个fun是错的。

尽量使用常量引用
常量引用是指对一个常量的引用,把函数不会改变的形参定义成(普通的)引用是一种比较常见的错误,这种做法会给调用者一个极大的误导,认为函数可以修改它的实参的值。还有,使用引用而非常量引用也会极大地限制函数所能接受的实参类型,例如,我们不能把const对象,字面值或者需要类型转换的对象传递给普通的引用形参:

string size_type find_char(string &s,char c,string occurs);
find_char("hello world",‘o’,ctr);

const成员函数
在这里我们引入了类和this指针的概念,我们先来定义个一个类和它的一个const成员函数:

struct Sales_data{
       string isbn() const{ return bookNo};
}

当我们调用isbn(),成员函数通过一个名为this的额外隐式参数来访问调用它的那个对象:

string isbn() const{ return this->bookNo};

函数之后的const限定符就是为了修改隐式this指针的类型。默认情况下,this类型是指向类类型非常量版本的常量指针。例如在Sales_data的成员函数中,this的类型是Sales_data *const,此时,紧跟在参数列表后面的const表示this是一个指向常量的指针,像这样使用const的成员函数被称作常量成员函数。

因为this是指向常量的指针,所以常量成员函数不能改变调用它的对象的内容。上例中,isbn可以读取调用它的对象的数据成员,但是不能写入新值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值