9.C++ const修饰成员函数

1.常函数:

在C++中,当成员函数被标记为const 时,这个函数被称为常量成员函数或。常函数的特点是在函数体内不会修改类的成员变量(除非成员变量被声明为mutable)。

常函数的声明格式如下:

cpp 复制代码
void functionName() const;

this指针的本质是指针常量,指针常量的指向是不可以修改的,就相当于:

cpp 复制代码
Person *const this;

在成员函数后面加const修饰的是this指向,让指针指向的值也不可以修改。

在常函数中,通过this指针访问的成员变量都被视为常量,并且不允许对它们进行修改,除非将特定成员变量声明为mutable关键字。

例如:

cpp 复制代码
class MyClass {
public:
    int a;
    mutable int b;

    void modifyA() const {
        // 不允许修改 a
        // a = 10;  // 错误

        // 允许修改 b
        b = 20;
    }
};

在上面的代码中,a 是常量成员变量,因此在常函数modifyA() 中不能对其进行修改。然而,b 被声明为mutable(adj.可变的),所以即使在常函数中也可以对其进行修改。

2.常对象:

常对象是指用关键字const 修饰的对象,也称为常量对象。常对象的成员变量在对象创建后就不能被修改。

在C++中,使用const关键字可以将对象声明为常对象。常对象只能调用常量成员函数,因为常对象不允许对其成员变量进行修改。

例如:

cpp 复制代码
class MyClass {
public:
    int a;
    void modifyA() {
        a = 10;
    }
    void printA() const {
        // 常函数可以被常对象调用
        // 常函数不会修改对象的成员变量
        cout << "a = " << a << endl;
    }
};

int main() {
    const MyClass obj;  // 声明一个常对象
    obj.a = 5;  // 错误,常对象的成员变量不可修改
    obj.modifyA();  // 错误,常对象只能调用常量成员函数
    obj.printA();  // 正确,常对象可以调用常量成员函数
    return 0;
}

3.总结:

1.常函数:

(1)指const修饰的成员函数

(2)常函数不会修改类的成员变量(除非成员变量被声明为mutable)

2.常对象:

(1)指用关键字const修饰的对象

(2)常对象的成员变量在对象创建后就不能被修改

(3)常对象只能调用常量成员函数,因为常对象不允许对其成员变量进行修改。

相关推荐
梓䈑1 小时前
【算法题攻略】BFS 解决FloodFill 算法、最短路问题、多源BFS 和 拓扑排序
c++·算法·宽度优先
程序喵大人6 小时前
【C++进阶】STL容器与迭代器 - 01 STL 容器先解决元素放在哪里
开发语言·c++·stl
cui_ruicheng6 小时前
Python从入门到实战(十六):多进程编程
开发语言·python
wdfk_prog7 小时前
嵌入式面试真题第 15 题:不可恢复异常后的通用崩溃快照、调用栈保存与离线分析架构
linux·开发语言·面试·架构
晴空了无痕7 小时前
从 Go 基础到 K8s:一条可落地的 Go 服务端成长路线
开发语言·后端·golang·kubernetes
神明不懂浪漫7 小时前
【第五章】Java中的继承与多态
java·开发语言
神州世通8 小时前
解密企业通信安全防线:Avaya Aura 三层安全架构深度解析
开发语言·php
AC赳赳老秦9 小时前
企业工商公开信息采集分析:OpenClaw 批量查询企业工商信息,生成企业画像报告
大数据·开发语言·python·自动化·php·deepseek·openclaw
qq_25183645710 小时前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长10 小时前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++