const限定符能将一个对象转换成一个常量,由于常量在定义以后就不能修改,因此在用const定义某一对象时需在定义时将其初始化。
在全局作用域中用const定义的对象是该文件的局部变量,其他文件不能访问该变量,如果要使const变量能被其他文件访问,需要显式的指定他为extern。
const变量如果定义在头文件中,那么任何一个包含该头文件的源文件都能使用这个变量。
const_cast可以去掉表达式的const性质。
const的引用:
const的引用所指向的是const对象,也就是说该引用(我理解的引用是相当于对象的地址)所表示的地址的内容是不能被改变的,const对象的地址不能赋给非const引用。
const指针:
这类指针所指向的内容可以改变,但是指针的本身值是不能被改变的,其定义形式如下:
int emp = 0;
int *const pemp = &emp;//此时的pemp就是const指针
指向const对象的指针:
这类指针本身的值可以被修改,但是指针所指向的内容不能被修改,其定义形式如下:
const double emp = 3.14;
const double *pemp = &emp;//此时的pemp就是指向const对象的指针
指向const对象的const指针:
这类指针的值不能被修改,同时其指向的内容也不能被修改,如:
const double emp = 3.14;
const double *const pemp = &emp;
利用const引用来避免复制:
在函数的参数传递中为避免复制和改变实参,可以使用const引用,如:
bool isshorter(const string &a,const string &b)
{
return a.size()<b.size();
}
如果函数的形参是非const引用,则不能将const对象传递给该形参,理由和简单,因为可以改变非const引用所指向的内容,因此不能将const对象传给它。
对象的const成员函数:
const成员函数不能修改调用该函数的对象,此类函数的形式如下:
bool same_isbn(const Sales_item &rhs) const
{
return isbn == rhs.isbn;
}
const迭代器,const_iterator:
每一种容器它都有const迭代器,const迭代器的作用主要是防止使用迭代器修改容器的内容,若有一个容器如vec,那么vec.end()所返回的迭代器类型是否为const类型取决于vec是否为const类型,如果是const类型则返回const类型的迭代器,否则返回非const类型的迭代器。