笔记:c++ 在函数后加const的意义

我们定义的类的成员函数中,常常有一些成员函数不改变类的数据成员 ,也就是说,这些函数是**"只读"函数**,而有一些函数要修改类数据成员的值。

如果把不改变数据成员的函数都加上const关键字进行标识,显然,可提高程序的可读性。其实,它还能提高程序的可靠性,已定义成const的成员函数,一旦企图修改数据成员的值,则编译器按错误处理。

const成员函数和const对象

实际上,const成员函数还有另外一项作用,即常量对象相关。对于内置的数据类型,我们可以定义它们的常量,用户自定义的类也一样,可以定义它们的常量对象。

  1. 非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误)
  2. 表示成员函数隐含传入的this指针为const指针,决定了在该成员函数中, 任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);
  3. 唯一的例外是对于mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用
c 复制代码
char getData() const{         
		return this->letter;
}

c++ 函数前面和后面 使用const 的作用:

  • 前面使用const 表示返回值为const
  • 后面加 const表示函数不可以修改class的成员

请看这两个函数

复制代码
const int getValue();
int getValue2() const;
c 复制代码
/*
 * FunctionConst.h
 */

#ifndef FUNCTIONCONST_H_
#define FUNCTIONCONST_H_

class FunctionConst {
public:
    int value;
    FunctionConst();
    virtual ~FunctionConst();
    const int getValue();
    int getValue2() const;
};

#endif /* FUNCTIONCONST_H_ */

源文件中的实现

c 复制代码
/*
 * FunctionConst.cpp 
 */

#include "FunctionConst.h"

FunctionConst::FunctionConst():value(100) {
    // TODO Auto-generated constructor stub

}

FunctionConst::~FunctionConst() {
    // TODO Auto-generated destructor stub
}

const int FunctionConst::getValue(){
    return value;//返回值是 const, 使用指针时很有用.
}

int FunctionConst::getValue2() const{
    //此函数不能修改class FunctionConst的成员函数 value
    value = 15;//错误的, 因为函数后面加 const
    return value;
}
相关推荐
zz-zjx14 分钟前
JVM垃圾收集器详解(jdk21+25实战版)
java·开发语言·jvm
郝学胜-神的一滴19 分钟前
Linux系统函数link、unlink与dentry的关系及使用注意事项
linux·运维·服务器·开发语言·前端·c++
摇滚侠21 分钟前
Spring Boot 3零基础教程,Spring Boot 日志级别,笔记19
java·spring boot·笔记
赵杰伦cpp21 分钟前
list的迭代器
开发语言·数据结构·c++·算法·链表·list
烧冻鸡翅QAQ27 分钟前
考研数学笔记(概率统计篇)
笔记·考研
zl97989939 分钟前
SpringBoot-配置文件yaml
java·spring boot·spring
~黄夫人~42 分钟前
Ubuntu系统快速上手命令(详细)
linux·运维·笔记·ubuntu·postgresql
老歌老听老掉牙43 分钟前
使用 OpenCASCADE 提取布尔运算后平面图形的外轮廓
c++·平面·opencascade
好家伙VCC1 小时前
**TensorFlow:发散创新的深度学习框架探索**随着人工智
java·人工智能·python·深度学习·tensorflow
闻缺陷则喜何志丹1 小时前
【动态规划】数位DP的原理、模板(封装类)
c++·算法·动态规划·原理·模板·数位dp