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,以此告诉编译器修改这个变量不会破坏对象的常量性。

发布了51 篇原创文章 · 获赞 6 · 访问量 6298

猜你喜欢

转载自blog.csdn.net/weixin_40859716/article/details/104383016