1.const关键字
常类型是指,使用const修饰的类型,常类型的变量或对象的值是不能被更新的。 在定义的时候就要初始化初值,如:const int b = 10;
1)指针所指向的内存空间,不能被修改
int operatorTeacher01(const Teacher *pT)
{
//pT->age = 10;
return 0;
}
2)指针变量本身不能被修改
int operatorTeacher02( Teacher * const pT)
{
pT->age = 10;
//pT = NULL; //
return 0;
}
3)指针所指向的内存空间和指针变量本身都不能被修改
int operatorTeacher03( const Teacher * const pT)
{
//pT->age = 10;
//pT = NULL; //
printf("age:%d", pT->age);
return 0;
}
2.C语言const和c++const的区别
a.语言中的const是一个冒牌货
b.C++语言中 const是一个真正的常量
原因分析
//const int b = 10; 符号表
void main82()
{
//好像 a 是一个常量
const int a = 10;
//a = 11;
int *p = NULL;
p = (int *)&a;
*p = 20; //间接赋值
//在C里面*p会被修改成功,在C++里是不会修改成的
printf("a:%d \n", a);
printf("*p:%d \n", *p);
system("pause");
}
3.修饰函数返回值
const int fun1()
const int* fun2()
const int& fun3()
这种用得不是很多,作用类似于修饰变量,返回一个const型的变量
4.修饰类对象/指针/引用
const classA a;
const classB* b;
const classC& c;
(1)不能改变对象的任何成员变量
(2)不能调用任何非const成员函数
5.修饰类成员变量
(1)不能被修改
(2)只能在类初始化列表中被赋值
小总结:只能在类初始化列表中被赋值的情况:
(1)const成员变量
(2)引用变量
(3)基类构造函数
6.修饰类成员函数
void fun() const;
(1)不能修改类的任何非静态数据成员(可以修改静态数据成员);
(2)不能调用类的任何非const函数(可以调用const成员函数)。
7.const常量与define宏定义的区别
(1) 编译器处理方式不同
define宏是在预编译阶段展开。
const常量是编译运行阶段使用。
(2) 类型和安全检查不同
define宏没有类型,不做任何类型检查,仅仅是展开。
const常量有具体的类型,在编译阶段会执行类型检查。
(3) 存储方式不同
define宏仅仅是展开,有多少地方使用,就展开多少次,不会分配内存。
const常量会在内存中分配(可以是堆中也可以是栈中)。