用于c++类中的成员函数以及成员变量
- 常成员函数
1.常成员函数通常是把const关键字放在函数名的后面,例子
class A{ public: int getNum() const {}; };
2. 常成员函数不能修改数据成员的值,为什么呢?
//我们常规的写法 class A{ public: int changeNum() { _a = 10; }; private: int _a; }; //其本质其实是这样的 class A{ public: int changeNum(A* this) { this->_a = 10; }; private: int _a; }; //当成员函数是常成员函数时 class A{ public: int changeNum(A* const this) const { this->_a = 10; }; private: int _a; }; //他可以等价于 class A{ public: int changeNum(const A* const this) { this->_a = 10; }; private: int _a; }; //所以此处 this变成了常指针,不能改变其值
3. 要调用常成员函数,需要先新建常对象,常对象只能调用常成员函数。(参考https://www.jb51.net/article/84409.htm)
4. 普通对象可以调用全部成员函数。
- 常成员变量
1. 常成员变量只能通过初始化列表进行初始化,不能再构造函数体中进行初始化。
用于c++常规的数据类型
const 与基本数据类型
int a = 3;// a可以改变 const int b =4;//b不可以改变
const 与指针类型
扫描二维码关注公众号,回复:
3202394 查看本文章
//下述两个申明完全等价 const int * p = NULL ; int const *p = NULL ; // 但是与下面这个有区别 int* const p = NULL ; //下述两个申明完全等价 const int* const p = NULL; int const* const p = NULL; //const int *p 可以理解为 const(int *p) 也就是说 *p的值不能改变 //int * const p 可以理解为 int* (const p)也就是p的值不能被改变 //int const* const p 这种情况*p和p的值都不能被改变
const与引用
//此时将不能通过给y赋值来改变x int x =3; const int &y = x;
//下面给出几种常见的错误表述 const int x = 3; x=5; int x = 3; const int y = x; y =5; int x = 3; const int *y = &x; *y = 5; int * const y = &x; y = &z; const int x = 3; const int & y = x; y = 5; const int x = 3; int *y = &x; //下面的是正确的 int x= 3; const int *y = &x;