const在函数前后的意义

const在函数前后的意义(有点晦涩,但是请一定看完)

一、const在函数后面

1、只允许在类的非静态成员函数后面加const;(加到非成员函数 或 静态成员后面会产生编译错);
2、后面加的const其实是对隐含传入参数this指向类对象的修饰,即 *this 是被const修饰,那this所指向的类对象的成员都是不允许被修改的;

(备注:有人认为const修饰的是this指针,那么不能改变的就是this指针本身,而不是this指针指向的成员,其实这个const修饰的是this和(*this),下面代码有详细解释,this指针的实际参数是:const A * const this格式的)

3、唯一的例外是对于mutable修饰的成员。
4、加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调用
也就是说:在这里插入图片描述

二、const在函数前面

1 、返回值为const;

上代码:

#include <iostream>
#include<memory>
#include<string>
#include<vector>
#include<list>
#include<typeinfo>
using namespace std;
//const和函数结合
//一、const在函数后面
//1、只允许在类的非静态成员函数后面加const;(加到非成员函数 或 静态成员后面会产生编译错);
//2、后面加的const其实是对隐含传入参数this指向类对象的修饰,即 *this  是被const修饰,
//那this所指向的类对象的成员都是不允许被修改的;
//(备注:有何友人认为const修饰的是this指针,那么不能改变的就是this指针本身,
//而不是this指针指向的成员,其实这个const修饰的是this和(*this),下面代码有详细解释)
//3、唯一的例外是对于mutable修饰的成员。
//4、加了const的成员函数可以被非const对象和const对象调用,
//但不加const的成员函数只能被非const对象调用
//二、const在函数前面
// 1 、返回值为const;
void func1(int a, int b)const//error  参考规则1  只允许在类的非静态成员函数后面加const;
//(加到非成员函数 或 静态成员后面会产生编译错);
{

}

static int func2()const//error参考规则1  只允许在类的非静态成员函数后面加const;
//(加到非成员函数 或 静态成员后面会产生编译错);
{

}

class A
{
public:
	void add(int a, int b)const//OK    其实这是传入的this指针应该是这样的形式:
	// const A * const this 所以this  和*this  都不允许改变
	{
		m_c = 100;//ok  
		m_a = 100;//
		this = 0XFFFF0048;//error 
	}

	static void sub(int a, int b)const//error  参考规则1  只允许在类的非静态成员函数后面加const;
	//(加到非成员函数 或 静态成员后面会产生编译错);
	{

	}
private:
	int m_a;
	int m_b;
	mutable int m_c;
};

const char* func3()
{
	char *m = "test";
	return m;
}


int main()
{
	char * p = func3();//error  返回值为const;  char*p 不是 const
	const char * s = func3();//ok
	cout << s << endl;
}



  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值