1.const变量,即常变量(变量值保持不变,不能被修改)
a.const变量默认时是定义该变量的文件的局部变量
b.非const*指针无法指向const 变量,只有const *指针能指向const 变量。
c.一些const 变量定义在头文件中,const变量通过常量表达式自我初始化时.
2.
A.
a.const T *pstr;指向常对象的指针,简单理解成*pstr不变,即指向的对象不变。这种指针的作用是指向对象时,防止指针对指向的对象进行修改值,起保护对象的值的作用
b.T * const pstr;常指针,简单理解成pstr不变,即指针变量的值不变。这种指针的作用指向该对象后,则只能指向该对象,不能指向其他对象,可以对该对象的值进行修改。
c.const T * const pstr;指向常对象的常指针,简单理解成*pstr不变,pstr不变,即指向的对象不变且指针变量不变。这种指针的作用是指向该对象后,则只能指向在该对象,不能指向其他对象,不可以对该对象的值进行修改。
B.const 指针与非const指针
a.无法从“const T *”转换为“T *”,假如行的话,则会修改该指针指向的对象的值,则不合理,不成立,破坏了const的作用,编译器所以报错
无法从"const T * const"转换为"T *"
b.非const指针能转换为const指针
3.const 引用
const T &pstr;指向常对象的引用
问题:无法从"const T "转换为"T &";
非const引用只能绑定到与该引用同类型的对象
const引用则可以绑定到不同但相关的类型的对象或绑定右值
4.
A.const 成员函数
A Object;
内部调用过程:const A *this=&Object;
this->该成员函数;
该函数过程的作用是防止函数被调用后执行过程中某个语句修改了调用该函数的对象的值,其实就是保护调用该函数的对象的值
B.const成员函数与非const成员函数
a.const 成员函数不可以访问非const 成员函数原因是const *this 指针不能转换为 this指针
b.非const 成员函数可以const 成员函数原因是 this指针能转换为const *this 指针
5.const 对象,即常对象.
const 对象只能调用const 成员函数,不能调用非const 成员函数。原因就是const对象由const *this指针指向,而不能由非const *this指针指向。
非const对象既能调用非const成员函数,又能调用const 成员函数。非const对象能调用const成员函数的原因就是this指针转换为const *this指针。
6.const对象的动态分配和回收
与其他常量一样,动态创建的const对象必须在创建时初始化,并且已经初始化,其值就不能再修改。对于类类型的const动态对象,如果该类提供了默认的构造函数,则此对象可隐式初始化。
内置内型对象或未提供默认构造函数的类类型对象必须初始化。
7.const数据成员
在类中说明const数据成员时,只能通过成员初始化列表的方式来生成构造函数对数据成员初始化。
8.volatile
有些编译程序在编译过程中还改变 表达式的计算顺序,volatile可以防止这些改变的发生。
volatile用法跟const差不多。