登录/注册

const函数

更多

在 C++ 中,const 成员函数(常量成员函数)是指被 const 关键字修饰的类成员函数。它在函数声明和定义的参数列表后添加 const 关键字,表示该函数不会修改类的成员变量(除非成员被声明为 mutable)。

核心特性:

  1. 不修改对象状态

    • const 函数内部,所有非 mutable 成员变量被视为只读,修改它们会导致编译错误。
    • 只能调用其他 const 成员函数(防止间接修改状态)。
  2. 支持常量对象调用

    • 常量对象(如 const MyClass obj;只能调用 const 成员函数
    • 非常量对象可以调用 const 和非 const 函数(优先匹配非 const 版本)。
  3. 重载依据

    • 相同函数名的 const 和非 const 版本构成重载,编译器根据对象的常量性选择调用:
      class MyClass {
      public:
      void foo();       // 非 const 版本
      void foo() const; // const 版本(重载)
      };

示例代码:

#include <iostream>

class Counter {
private:
    int count;                   // 普通成员
    mutable int accessCount;     // mutable 成员(可在 const 函数中修改)
public:
    Counter() : count(0), accessCount(0) {}

    // const 成员函数
    int getCount() const {
        // count = 10;          // 错误!不能修改非 mutable 成员
        accessCount++;           // 正确:mutable 成员可修改
        return count;
    }

    // 非 const 成员函数
    void increment() {
        count++;
    }
};

int main() {
    const Counter c1;            // 常量对象
    // c1.increment();           // 错误!常量对象不能调用非 const 函数
    std::cout << c1.getCount();  // 正确:调用 const 函数

    Counter c2;                  // 非常量对象
    c2.increment();              // 正确
    c2.getCount();               // 正确:非常量对象可调用 const 函数
    return 0;
}

关键用途:

  1. 增强代码安全
    防止函数意外修改对象状态(编译器强制检查)。

  2. 支持常量对象的操作
    确保常量对象能调用不改变状态的函数。

  3. 明确设计意图
    通过函数签名表明其是否修改对象状态,提升代码可读性。

最佳实践:如果成员函数不会修改对象状态,应将其声明为 const

求助,关于const char *p参数的函数和中断赋值的问题

假设一个带有 const char *p参数的函数 在此函数中 p指向一个全局变量(p= a) 然后我在中断里给此全局变量赋值(a=1) 如果程

2023-11-09 06:05:41

Linux驱动函数接口说明

函数接口说明 创建目录、文件函数: /* 创建目录 */ struct dentry *debugfs_create_dir( const ch

2023-09-27 11:20:03

const 和指针变量使用

有时候我们希望定义这样一种变量,它的值不能被改变,在整个作用域中都保持固定。例如,用一个变量来表示班级的最大人数,或者表示缓冲区的大小。为了满足这一要求,可以使用const关键字对变量加以限定

2023-06-22 10:43:00

带你在单片机编程中熟练使用const(可下载)

在 C 语言关键字中 const 举足轻重,我们今天就深度聊一聊 const 的定义和实际应用,让它 不再是迷C 语言中 const 关键字是

资料下载 松山归人 2025-04-01 14:18:15

C语言相关文件函数的功能与用法详细说明

fopen(打开文件) 相关函数 open,fclose 表头文件 #include《stdio.h》 定义函数 FILE * fopen(

资料下载 POPO升级中 2019-12-04 08:00:00

C语言中的const与readonly有哪些相同和不同点

以前只是用const与readonly声明常量,今天在网上看了它们的一些其它属性,觉得有必要弄清楚它们的用法与异同,所以动手找了找,也写了几行代码以呈现,还望大家给予指点。

资料下载 佚名 2019-11-07 15:54:19

Keil C51中的const与code的讲解

在Keil 51中,code修饰的变量放在ROM(Flash)中,而const修饰的变量为只读(不可修改),放在RAM中!可以用“code const”修饰变量,表示变量存储在ROM中,且为只读

资料下载 笑尽往事 2019-09-04 17:27:00

单片机程序为什么必须要包含CONST H

下面就介绍一下在我的单片机程序里必须要包含的一个头文件----“const.h”,完整内容如下:

资料下载 h1654155275.0032 2019-08-15 17:32:00

const关键字应用总结

C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性

2023-05-26 09:06:25

C语言中const的用法介绍

C语言标准库中很多函数的参数都被 const 限制了,但我们在以前的编码过程中并没有注意这个问题,经常将非 const 类型的数据传递给

2023-01-05 10:03:42

C语言-内联函数、递归函数、指针函数

这篇文章介绍C语言的内联函数、递归函数、函数指针、指针函数、局部地址、

2022-08-14 10:03:14

C++中const以及this指针的使用

的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改; 修饰成员函数,说明该成员

2021-09-23 11:39:48

类成员函数const的使用,有什么注意事项?

类成员函数中const的使用,有什么注意事项?

2021-04-26 06:42:30

memcpy函数实现及其优化

函数原型void * memcpy ( void * destination, const void * source, size_t num );

2020-12-09 14:25:18

请问const quaternion * attitude_getAttitude(void)这个函数什么类型的?

帮忙分析一个函数const quaternion * attitude_getAttitude(void){ return &attitude;}其中typedefstruct{ float

2019-09-27 01:15:26
7天热门专题 换一换
相关标签