C++指针常量和常量指针,const修饰函数。

申明:这是我结合其它大佬博客和代码的个人理解,肯定有很多不对的,所以欢迎指正,轻喷
申明:这是我结合其它大佬博客和代码的个人理解,肯定有很多不对的,所以欢迎指正,轻喷
申明:这是我结合其它大佬博客和代码的个人理解,肯定有很多不对的,所以欢迎指正,轻喷

const修饰变量 const在谁前面就修饰的是谁

1、指针常量

  • 形式–数据类型 *const 指针名 = &a
  • 解释:指针是一个存储某个变量地址的变量,比如 *p = &a 其中p是指针表示的是a的地址和&a是一个意思,&a代表a的地址,* 的作用就是解引用取出地址指向的值。
  • int *const p = &a,const在指针p前面表示,而p表示的是a的地址,也就是说p所指向的常量的地址是不能改变的(所以这个时候必须初始化),即不能出现p = &b这种情况,这是将b的地址给p改变了地址,所以是不可行的。但是地址指向的内容是可以改变的比如 *p = b;这个时候a的值=b的值,但是a b的地址是不一样的,p的地址仍然是a的地址,但是指向的数值变成了b的值。

2、常量指针

  • 形式–const 数据类型 *指针名 = &a;或者 数据类型 const *指针名 = &a(可以不初始化)
  • 解释:const int *p = &a; int const *p1 = &b;这两种类型都是常量指针,const* 前面表示,指针地址所指向的值是不能发生改变,这里将 * 理解为解引用表示值,p表示的是指向a的地址的指针变量。此时const修饰的值不能发生改变,但是指向该值的地址可以发送改变,即能改变指针变量的值(就是变量的地址),如 p = &b,这时通过重新改变地址的方式改变了p所指向的值,但是通过 *p = b; / *p = &b;都是不正确的,这两种方式都是在改变原地址指向的值。

3、const在函数前后面

> const修饰函数:加在函数前面和加在函数后面
加在函数前面,表示返回值为const
加在函数后面:
1、只允许在类的非静态成员函数后面加const;(加到非成员函数 或 静态成员后面会产生编译错);
2、后面加的const其实是对隐含传入参数this指向类对象的修饰,即 *this 是被const修饰,那this所指向的类对象的成员都是不允许被修改的;
3、唯一的例外是对于mutable修饰的成员。
4、加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非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;
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值