函数名后面加上const的作用

在C++中,非静态成员函数的函数名后面可以加上const关键字(静态函数和非成员函数都不能加,加上后编译会出错),加上后该函数隐式传入的this指针将const指针。

例如执行下面的代码:

#include<iostream>
#include<string>
#include<typeinfo>
using namespace std;
class Sale_Date
{
public :
	void isbn()
	{
		cout << typeid(this).name() << endl;
	}
};
int main()
{
	Sale_Date a;
	a.isbn();
	return 0;
}
此时输出的是:


给isbn函数加上const关键字后:

#include<iostream>
#include<string>
#include<typeinfo>
using namespace std;
class Sale_Date
{
public :
	void isbn()const
	{
		cout << typeid(this).name() << endl;
	}
};
int main()
{
	Sale_Date a;
	a.isbn();
	return 0;
}

输出为:



既然加上const关键字后this指针变成了const指针,那么在该函数内部就不能再修改该类的成员变量了,但是有一个例外,就是在需要改变的成员变量前面加上mutable关键字后就可以在加了const限定的成员函数内部修改该成员变量的值了,也就是说,在上面的例子中,要是我想在加了const的isbn函数里面修改bookNo的值,那么我只需要在string bookNo前面加上mutable就可以了。


那么 ,在类成员函数后面加上const限定后,除了上面说到了作用,还有其他的作用吗? 肯定有啊,不然我写这句话干嘛


在类成员函数后面加上const关键字后,这个函数就能够被const对象和非const对象调用

如果类成员函数后面没有const关键字,那么这个函数就只能被非const对象调用


什么意思呢?

还是看上面的那个例子:

对于加了const关键字的isbn函数,main函数中的a对象的类型既可以是Sale_Date,也可以是const Sale_Date

对于没加const关键字的isbn函数,main函数中的a对象的类型只能是Sale_Date,不能是const Sale_Date,否则就不编译错误


那么关于const放在类成员函数后面还有没有什么其他的作用了呢?

暂时没有了,要是还有了话,我之后再来补上。。。


对于this指针补充一点,this指针本身是一个const指针,只不过这个const是顶层const,也就是自身不能够改变,就是说他指向的地址是固定不变的

函数名后面加上const关键字后,this指针就的const就既是顶层const,也是顶层const,也就是说,this指针指向的地址和该地址里面的内容都是不能改变的。



猜你喜欢

转载自blog.csdn.net/zhc_futrue/article/details/78176220