1. const
const是constant的缩写,意为常用,它有以下几个作用
1.1. 修饰变量
1.1.1. const修饰普通变量
const int a = 10;
const修饰了int,表示这段代码定义的变量,最后取的是int型且值为10,不可被后面的代码修改。
int const a = 10;
const修饰了变量a,表示这段代码定义的变量,最后取的值是int型且为10,不可被后面的代码修改。
1.1.2. const修饰指针变量
const修饰int,表示指针指向的对象为常量,*p1所指向的对象值不能通过*p1来修改,但是可以给p1重新赋值,使其指向不同的对象。
int a = 10;
int b = 9;
const int* p1 = &a;
p1 = &b;//正确,给p1重新赋值,使其指向不同的对象int a = 10;
int b = 9;
const int* p1 = &a;
*p1 = b;//错误,*p1所指向的a的值不能通过*p修改
const修饰int,表示指针所指向的内容为常量
int a = 10;
int b = 9;
int const* p1 = &a;
*p1 = 10;//错误
*p1 = 19;//错误int a = 10;
int b = 9;
int const* p1 = &a;
p1 = &b;//正确
1.2. 修饰函数
在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数。为什么不能调用非const函数?因为非const函数可能修改数据成员,const不能修改数据成员,所以const成员函数内只能调用const函数。
2. mutalbe
mutable关键字,故名思意,是可变的、易变的之意。该关键字修饰的变量更容易被改变,可以被const函数改动。
在类中,const成员函数一般情况下不能修改成员变量,但它可以修改mutable修饰的成员变量x
#include <iostream>
using namespace std;class A {
public:void fun() const {x = 1; // 编译不过y = 1; // 可编译,可执行}private:int x;mutable int y;
};int main() {A a;a.fun();return 0;
}
参考文献
C语言关键字const详解_little train的博客-CSDN博客_赋值const代码什么意思