Const in C++
const
更像一个假的关键词,因为它实际上在生成代码的时候并没有做什么。这是一种针对开发人员写代码的强制规则
const
的作用:相当于你做出承诺某些东西是不变的,不会改动的(但这只是一个承诺)
用法
最简单的用法:
const int MaxAge = 90;
对于指针:
-
💡对指针
const int*
,表示不能修改指针指向的内存地址的内容了,但是可以修改指针的指向const int* a = new int; //表示不能修改指针指向的内存地址的内容了 int b = 1; *a = 1; //错误操作 a = &b; //正确操作 //const只是让指针不能修改指向的内存地址的内容,但是指针指向的内存地址还是可以改变!!!
-
💡而对指针
int* const
,则功能与上面完全相反,表示不能修改指针的指向,但是可以修改指向的内存地址的内容- 关键在于
*
在前面还是在后面 - 星号
*
在前面,则是要让指针变成常量,使它不能被重新分配,但可以修改它指向的内容(const指针) - 星号
*
在后面,则是让它可以被重新分配,但是不能修改指向的内容
- 关键在于
-
顺便一说
const int* const
这种两个const
的,代表指针既不能改指向,也不能改指向的内容
💡由C++Primer知,当前缀五花八门时,从右向左阅读有助于理解真实含义
- 如
const int* a
是指向整型的常量指针,不能修改指向内容 - 如
int *const a
是常量指针指向一个 int 对象 - 如
const double *const pip = &pi
是一个常量指针,它指向的对象是一个双精度浮点型常量
对于类:
-
放在方法名的后面(只有类里才能这么用)
- 这种做法意味着:这个方法不会修改任何实际的类(故下面是不能修改类的成员变量的),意味着这只是一个只读的方法,只能从类中读取数据,不能修改数据
class Entity { private: int m_X, m_Y; public: int GetX() const { m_X = 2; //❌这个是错误做法!!! return m_X; } }
-
定义一个常量的对象:
const Entity e
- 这个常量的对象只能使用常量的方法,比如它只能使用上面的
Getx()
- 这个常量的对象只能使用常量的方法,比如它只能使用上面的