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++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量
C++中常量引用指针常量指针指针常量常量引用顶层常量与底层常量