const

const限定符,希望英一这样一种变量,它的值不被改变

因为const对象一旦创建其值就不能再改变,所以const对象必须初始化

当以编译初始化的方式顶一个const对象时,编译器将在编译过程中把用到该变量的地方都替换成相应的值。为了实现替换,编译器就必须知道变量初始值,但如果程序包含多个文件,则每个用了const对象的文件都必须能够访问到它的初始值才行。简言之,每个文件都要对const对象进行初始化。当多个文件中出现同名的const变量时,其实是等同于在不同文件中分别定义了单独的变量,如果要实现同名const变量实现共享,需要在一个文件定义const,而在多个文件中声明并使用它。解决办法:对于const变量不管是声明还是定义都添加extern关键字。例如,在file_1.cc文件中定义常量 extern const int bufSize = fcn();在file_1.h头文件中声明extern const int bufSize;

const的引用,对常量的引用 const int c1 = 1024; const int &r1 = c1;

r1 = 1025;	//错误,对常量的引用

对const的引用有有两个特例,其余的引用的类型必须与其所引用对象的类型一致

例1: int i = 42; const &r1 = i; //允许将const int& 绑定到普通 int 对象上

例2:允许一个常量引用绑定到一个非常量对象、字面值,甚至是一般表达式

double dval = 3.14; const int &r1 = dval;
//实际编译器会创建一个临时对象
double int temp = dval;	const doube &r1 = temp;

const 和指针

与引用一样,可以令指针指向常量或者非常量。

指向常量的指针,不能改变所指向对象的值

const double pi = 3.14;
const double *p = π

常量指针 指针类型必须和所值对象类型一致,但也有例外,允许常量指针指向一个非常量对象

double val = 3.14;
const double * p = &val;

解释:指向常量的指针或引用,不过是指针(引用)他们的自以为是,他们本身认为指向的对象内容不能修改,觉得自己指向了常量,所以自觉地不去修改所指向的对象的值,但你想啊,原始的对象在定义,然后初始化,只要原始对象不是常变量,他的值就是可以修改的啊。

const指针 常量指针

指针是对象,那么也可以向其他对象一样,允许指针本身定为常量。常量指针必须初始化,一旦初始化后,它的值不会再发生改变。

把 *放在const关键字之前以说明指针是一个常量。也就是说指针本身是不变的而不是指向的那个值。

const double pi = 3.14;
const double *const pip = π

const 指针、引用

const 类对象(只能调用const函数)

const成员变量(如果是内置类型,必须显示初始化或者类内初始化)

const成员函数 不能改变类内给cosnt成员变量的值

const函数返回值

const引用用作析构函数参数