首页 > 后端开发 > C++ > 正文

C++类中const成员函数与常量对象使用

P粉602998670
发布: 2025-09-05 09:59:02
原创
767人浏览过
常量对象只能调用const成员函数,因为const对象的this指针为const类型,无法调用隐含非const this指针的普通成员函数;const成员函数承诺不修改对象非mutable成员,确保对象状态安全,提升多线程安全性;mutable成员可被const函数修改,适用于缓存或计数器场景。

c++类中const成员函数与常量对象使用

在C++中,const成员函数常量对象是紧密相关的两个概念,它们共同确保对象状态在不该被修改的情况下不被意外修改。

常量对象只能调用const成员函数

当一个对象被声明为const时,意味着它的数据成员在整个生命周期中都不能被修改。因此,只能调用那些被标记为const的成员函数。

例如:

class MyClass {
public:
    int getValue() const { return value; }  // const成员函数
    void setValue(int v) { value = v; }     // 非const成员函数
private:
    int value = 0;
};

const MyClass obj;
obj.getValue();  // ✅ 允许:const函数
// obj.setValue(5);  // ❌ 错误:不能在const对象上调用非const函数
登录后复制

这是因为非const成员函数隐含地接收一个指向非const对象的this指针,而const对象只能传递const this指针。

const成员函数的定义与作用

在成员函数声明或定义的参数列表后加上const关键字,表示该函数不会修改类的数据成员(除非成员被声明为mutable)。

立即学习C++免费学习笔记(深入)”;

const成员函数的this指针类型是

const ClassName*
登录后复制
,因此不能修改对象的任何非mutable成员。

全功能网上商城
全功能网上商城

在思高数码商城的基础上经过大量修改完善而成,引入了新的功能 此商城比较简洁,但功能完整。 1.支持产品多图:略图,小图,大图,多图。 2.市场价与热卖价对比。 3.注册与否均可购物。有很多人讨厌注册,这个功能正好迎合了这部分人的使用习惯。 4.除了常见商城的左侧分类树外,还有顶端分类菜单。 5.有友情链接模块。 6.大多功能均制作成独立模块 更新内容: 1.页顶分类菜单——老版本中需要手工修改页面

全功能网上商城 4
查看详情 全功能网上商城
使用const成员函数的好处包括:
  • 提高代码安全性:防止意外修改对象状态
  • 支持对const对象的操作
  • 使函数接口语义更清晰
  • 在多线程环境中更安全(可被多个线程同时调用)

mutable关键字的特殊用途

有时我们需要在const成员函数中修改某个特定成员,比如用于缓存或计数器。这时可以将该成员声明为mutable

class Logger {
public:
    void log(const std::string& msg) const {
        count++;  // ✅ 允许:count是mutable
        std::cout << msg << std::endl;
    }
    int getCount() const { return count; }
private:
    mutable int count = 0;  // 即使在const函数中也可修改
};
登录后复制

mutable成员突破了const的限制,但应谨慎使用,仅用于不影响对象逻辑状态的场景。

const重载:提供不同版本的成员函数

C++允许对成员函数进行const重载,编译器会根据对象是否为const自动选择合适的版本。

class Container {
public:
    int& at(size_t index) { return data[index]; }
    const int& at(size_t index) const { return data[index]; }
private:
    int data[100];
};

Container c1;
const Container c2;

c1.at(0) = 10;    // 调用非const版本,允许赋值
// c2.at(0) = 10;  // 错误:c2是const,返回const引用,不能赋值
int x = c2.at(0); // ✅ 正确:读取值
登录后复制

这种技术在标准库中广泛使用,如

std::vector::operator[]
登录后复制

基本上就这些。合理使用const成员函数和常量对象,能显著提升代码的健壮性和可维护性。不复杂但容易忽略。

以上就是C++类中const成员函数与常量对象使用的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号