const-----英语全称(constant)-----常数,常量的意思
在c++中的常用来修饰变量或者对象,意味着不能被更新。
1:const+变量------限定变量的值,无法修改,对变量起保护作用,增加程序的健壮性;必须进行初始化。
- const int a=100;
- a=1000;//错误,无法修改
- const int b;//错误,没有进行初始化
2:const+指针--------表示着常量指针,指针常量,指向常量的常指针。
(1)指向常量的指针---常量指针(指针的指向(内存地址)可以更改,指针的值不可以修改)
- const int *h
- int const *h
- (这两个等价)
例如:
- int g=100;
- int s=200;
- const int *p=&g;
- //修改指针p的地址可以吗?
- p=&s;
- //修改指针p的值可以吗?
- *p=10000;
(&是取址符,因为p是地址,*P是解引出指针的地址)
(2)指向指针的常量----指针常量(指针的指向(内存地址不可以更改),指针的值可以修改)
int*const h
例如:
- int g=100;
- int s=200;
- int *const p=&g;
- //修改指针p的地址可以吗?
- p=&s;
- //修改指针p的值可以吗?
- *p=10000;
总结:const放在*的后面,意味着指针是常量,指针的值储存的是数据的内存地址,所以内存地址不能改变,但地址指向的数据是可以改变的。(指针常量)
const放在*前面,意味着指针的指向的内存数据不可以改变,但指向的地址可以改变。(常量指针)
(3)指向常量的常指针--------指针的指向不可以修改,指针指向的值也不可以修改
例如:
- int g=100;
- int s=200;
- const int *const p=&g;
- //修改指针p的地址可以吗?
- p=&s;
- //修改指针p的值可以吗?
- *p=10000;
3.const+函数--------(1)使函数的返回值不能改变;(2)使函数的参数在函数体内不可改变。
- const int func();
- const int* func();
- void func(const int a,const int *o);
4:const+类
(1)const修饰类中的成员函数-----类中的成员函数后面加上const(区分const+函数)
①该成员函数不能改变类中的成员变量
②加了const的成员函数可以被非const对象和const对象调用 但不加const的成员函数只能被非const对象调用
③const修饰的成员函数中不能调用其他的没有被const修饰过的成员函数
- class Person {
- public:
- Person() {
- m_A = 0;
- m_B = 0;
- }
- void ShowPerson() const {
- this->m_B = 100;//this指针的本质是一个指针常量,指针的指向不可修改,在const修饰的成员函数中,内存空间的指向的值也不能修改,意味着这是一个指向常量的常指针,但如果用mutable修饰变量,就可以修改。
- }
-
- void MyFunc() const {
- //mA = 10000;
- }
-
- public:
- int m_A;
- mutable int m_B; //可修改 可变的
- };
(2)const修饰类中的成员变量-----(让成员变量变为不可修改的变量)
(3)const修饰类对象
- //const修饰对象 常对象
- void test01() {
-
- const Person person; //常量对象
- cout << person.m_A << endl;
- //person.mA = 100; //常对象不能修改成员变量的值,但是可以访问
- person.m_B = 100; //但是常对象可以修改mutable修饰成员变量
-
- //常对象访问成员函数
- person.MyFunc(); //常对象不能调用const的函数
-
- }