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

Posted 杨书落

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
;

以上是关于C++指针常量和常量指针,const修饰函数。的主要内容,如果未能解决你的问题,请参考以下文章

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

C++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量

C++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量

C++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量

五万字读懂c++

五万字读懂c++