const in C++

目录

  1. 1. 修饰变量
  2. 2. 修饰指针
  3. 3. 函数中使用
    1. 3.1. 修饰函数参数
    2. 3.2. 修饰函数返回值
  4. 4. 类中使用
    1. 4.1. 修饰成员变量
    2. 4.2. 修饰成员函数
    3. 4.3. 修饰类对象

C++中const可用于变量, 指针, 函数和类.

修饰变量

const修饰的变量的值不能再修改, 编译器也可以对其进行数据静态类型检查. 所以用const声明的变量可以保证类型安全, 用以取代C中的宏定义.

const定义的常量在C中是全局的, 在C++中则视声明位置而定.

修饰指针

使用指针时涉及到两个对象: 该指针本身和被它所指的对象.

const char *pc;    // pc是到const char的指针, 即*pc的内容不可修改, 但pc可以指向其他字符串
char const *pc;    // 同"const char *pc"
char *const pc;    // pc到char的const指针, 即*pc的内容可以修改, 但pc不能指向其他字符串

函数中使用

修饰函数参数

const常用于修饰函数的指针参数和引用参数, 一是表示参数的内容不可修改, 二是可以提高效率.

修饰函数返回值

如果函数的返回值是指针或引用, 增加const修饰后, 则返回值不能被直接修改, 且返回值只能被赋值给const修饰的同类型变量.

类中使用

修饰成员变量

const的成员变量不能被修改, 且只能在初始化列表中赋值.

修饰成员函数

任何不会修改数据成员的成员函数都应用const修饰.
修饰形式:

int func(int) const;

对于使用了const修饰的成员函数:

  • 不能修改成员变量
  • 不能调用非const成员函数
  • const类对象只能调用const成员函数
  • const不能与static同时使用. const其实是用于修饰this指针, 即this指向的内容不可修改. 但static修饰的静态成员是类的而不是类对象的, 不含有this指针. 所以const和static不能共用.

另外, 构造函数和析构函数也是成员函数, 但不能使用const修饰, 因为两者都是在对成员变量修改.

修饰类对象

  • 对象的任何成员不能被修改
  • 只能调用const成员函数