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类型的迭代器。