基础const
const int ci;常对象,其值不可改变
const int & rci = ci;常引用,不可改变引用对象的值
const int * cpi;或 int const * cpi; 指向常量的指针,const 在*左边表示所指对象是常量,不能改变所指对象的值
int * const pic; 指针常量,const在*右边表示指针本身不可改变,但可以改变所指对象的值
const int * const cpic; 指向指针常量的指针,指针本身和所指向的对象均不可改变
带有const的函数
参数为const
void f1 (const widget * pw);
void f2(const widget* pw); //两种形式等价
返回值为const
class Rational{.....}
const Rational operator*( const Rational& lhs, const Rational& rhs);
此函数返回值设置为const,可避免用户写下以下的代码
Rational a, b, c;
(a * b) = c;
Ps: 一个良好的用户自定义类型的特征是它们避免无端的与内置类型不兼容
const成员函数
class TextBlock{
public:
const char& operator[ ] (std::size_t position) const
{ return text[position]; }
char& operator[ ] (std::size_t position)
{ return text[position]; }
private:
std::string text;
};
const 函数只能用与类的成员函数之中,可通过const重载
const成员函数中,若需要修改对象的no_static成员的值,则需要在类定义内所需修改对象加入mutable修饰符
const iterator
std::vector<int> vec; ....
const std::vector<int>::iterator iter = vec.begin();
*iter = 10;//正确,改变iter所指对象
iter++;//错误,iter是const
std::vector<int>::const_iterator citer = vec.c_begin();
*citer = 10;//错误,*citer是const
citer++;//正确
const std::vector<int>::const_iterator cciter = vec.c_begin();
*cciter = 10; //错误,所指对象为const
cciter++; //错误,cciter自身是const