存在问题:
经常使用一个变量表示缓冲区的大小
变量能够适当的调整空间大小
可是警戒程序改变大小spaconst的引入: 固定大小
注意:
const对象必须初始化
指针
const int i = get_size(); //√ 运行时初始化 const int bufSize = 512; // √ 编译时初始化 const int k; //×
曲线救国
const的值是不能被修改的
可是,能够把const变量拷贝出来,给新的对象,这样就能够修改新的对象的值来达到修改数据值目的
const的变量值依旧不变若是利用一个对象去初始化另外一个对象,他们是否是const都可有可无
code
int i = 42; int const ci = i; // unconst->const int j = ci; //const->unconst j = 1024;
默认状态下,const对象仅在文件内有
在一个文件中, const变量在编译过程当中,编译器会把全部的const变量 用 初始化的值代替
为了在多个文件中 使得const 变量都有效
因此会使用extern关键字对象
extern const int burSize = 512;
tips:
这种定义通常都是在头文件中
而后其余文件引入该头文件
对const的引用 :把引用绑定到const对象上
special: 对cons的引用,不能用于修改他所绑定的对象
除了两个例外以外,引用类型 必须与 所引用对象的类型一致
int i = 42; const int &ri = i; const int j = 50; //× int &rj = j; const int k = 60; const int &rk = k;
总结:
const变量能够引用非const变量,
非const变量不能引用const变量
const变量能够引用const变量
int i = 42; int &ri = i; const int &ri2 = i; int const &ri3 = i; // 这两个写法是等同的,表示a是一个int常量
ri,ri2,ri2,在这种状况下,ri2和ri3不能够被修改,ri能够被修改
可是ri被修改后,会影响绑定的ri2和ri3
const int和 int const 对于常量而言,写法是相同的,对于指针而言不一样
⭐1. 初始化引用:能够用任意表达式做为初始值,只要该表达式能转化成该类型
double dval = 3.14; const int &ri = dval;
具体过程: 3.14从double转化为了int型并存入了temp
double dval = 3.14; const int temp = dval; ⭐ const int &ri = temp;
temp就是临时量 temporary
容许指向常量的指针,指向很是量对象
double dval = 3.14; const double *dp = &dval;
const int targetc = 5; const int *ptri = &targetc; int target = 6; const int *ptri2 = ⌖ //× const double *ptrd = &targetc; //× int *ptr2 = &targetc;
指针能够指向常量值,也能够指向很是量值
指向常量值的 指针(pointer to const):不能用于修改所指对象的值
(不管所指对象是不是const)
而常量对象的地址,只能使用指向常量的指针
总结:
const -> x 或者 -> const x
引用不是对象,而指针是对象
因此const除了能够修饰 指针所指对象外(pointer to const),也能够修饰修饰指针本身(const pointer)
const pointer : 肯定指向,可是不影响所指对象数据变化
int target = 1024,target2 = 256; int *const pi = ⌖ target = 2048; //√ //× pi = &target2;
顶层const(top-level const)锁方向
底层const(low-level const)锁数据
注意 : 当进行拷贝操做时,top-level const不受影响,可是low-level const影响较大
**`当拷贝时候,拷入和拷出的对象都必须具备const资格,或者两个对象的数据类型能转换成一致,(很是量x 转化为 常量const x)
int i = 0; const int ci = 2; const int &c_ri = i; const int &c_ri_c = ci; //用于声明的const,low-level const int &ri = i; //x int &ri_c = ci;