446 字
2 分钟
C++入门 (十四) : CONST
2026-03-21

const#

我比较喜欢把const叫做一个”fake keyword”,因为它实际上在生成代码的时候并没有做什么。 它有点像类和结构体的可见性,是一种针对开发人员写代码的强制规则,为了让代码保持整洁的机制。 基本上 const 就是你做出承诺,某些东西是不变的,是不会改动的。但是它只是个承诺,而且你可以绕过或不遵守这个承诺,就像在现实生活中一样。

情况一#

不允许修改指针所指向内容的值

const int MAX_AGE = 90;
const int* a = new int;
// 等同于int const* a = new int;
*a = 2; // 报错,const使你不能修改a指针指向的内容
a = (int*)&MAX_AGE;

情况二#

不允许修改指针的指向

const int MAX_AGE = 90;
int* const a = new int;
*a = 2;
a = (int*)&MAX_AGE; // 报错,可以改变指针指向的内容,但是不能把指针自身重新赋值

情况三#

不允许修改指针指向与指向内容的值

const int MAX_AGE = 90;
const int* const a = new int;
*a = 2;
a = (int*)&MAX_AGE;

重点:看const*的左边还是右边 左边:不允许修改值 右边:不允许修改指向

类和方法中使用const#

class Entity
{
private:
int m_X, m_Y;
public:
int GetX() const[ // 承诺了这个方法不会改变类,是一个只读方法
{
m_X = 2; // 无法修改
return m_X;
}
};

int* m_X, m_Y,m_Y 仍是一个 int 类型,要让两个都是指针需要写成int* m_X, *m_Y

const 对象不能调用非 const 的成员函数,因为后者存在修改对象的可能

可以把成员变量声明为mutable int var,这样即使在 const 方法中也可以修改

C++入门 (十四) : CONST
https://dingfengbo.vercel.app/posts/c入门/14-c中的const/
作者
Eureka
发布于
2026-03-21
许可协议
CC BY-NC-SA 4.0