C++ 面向对象中的mutable和const

C++ 面向对象中的mutable和const

本文主要记录我对面向对象中 const(不变) 以及 mutable(可变) 的理解

const

  1. const加在成员函数后面(同时在声明与定义中指定)

这样做是为了告诉编译器,这个成员函数不会修改类的类对象的内容。先看看一下代码:

int sum(const Test &t){
	int start = t.beg_pos();
	int len = t.length();
	int res = 0;
	for(int i=0;i<len;++i){
		res += t.elem(start+i);
	}
	return res;
}

代码中类t是const引用参数,因此我们在调用t的函数的时候必须保证t不会被修改。但调用函数的时候,编译器不会知道哪些函数会修改t的内容。因此,必须在函数后面决定是否加const,来告诉编译器这个函数是否会改变对象的内容。
(虽然编译器不会每个函数分析它是const还是non-const,但对于声明为const的函数,它会检查有没有修改对象的内容)

  1. 成员函数可以根据const与否重载

下面这个类中,我们为val函数提供了const版本和non-const版本。
Non-const 的对象会调用non-const版(对象内容改变了也没关系),而const对象则会调用const版。

class Test{
public:
	Test(const MyTest& val)
		:_val(val){}
	const Test& val()const{ return _val};
	Test& val(){ return _val};
private:
	MyTest _val;
};

mutable

在const对象中,我们不希望修改对象的内容。但在某些类里面我们必须通过修改某些变量来做类似遍历的操作,但这个时候必会与const冲突。这是我们可以在变量前面加mutable,以此告诉编译器修改这个变量不会破坏对象的常量性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值