来到csdn一年多了,之前一直默默潜水,觉得学习这事应当分享,故写下本人第一篇博客,后续也将继续写下我在学习过程中学会的,理解的知识,如有感兴趣的朋友,不妨关注一下
const在英语中有常数的意思,应用在多个地方作用无外乎表达不可修改的大意
1.const修饰变量
1.1、const int a;当const修饰变量a时,将a的值由变量该为了常量,其中a的值是只读的不可修改
1.2、const int *a;该语句表示指向的整形常量的指针,它指向的值是无法更改的
1.3、int const *a;和const int *a所表达类似,表示指向整形常量的指针,指向的值同样是无法修改的
1.4、int *const a;其中const a可当做常量,是一个int类型的指针,表示指向整形常量的常量指针,不能够在指向别的变量,类似与常量不变,但指向一个变量的话那个变量的值是可以修改的(可以通过变量修改值,只是不能修改指向)
1.5、const int *const a;表示指向整形常量的常量指针,既不能再指向别的常量,同时指向的值也不能更改
1.6、int const *const a;表示指向整形常量的常量指针,既不能再指向别的常量,指向的值也无法再修改
总结:
- 首先常量不必多说,难点在于指针部分,通过2和3可以看到*号在const的右边,我理解等于将指针限定死了,而指针本身就是去指向一个空间,当指针限定死之后即无法对指向的内容进行更改指向同时也无法更改变量值
- 通过4可以看出,const没有修饰*,*位于const的左边,右边的const p可以假设当做常量看待,同常量用法,当固定指向之后将无法修改,类似常量确定后无法修改,但是同时它又是指针,无法限定变量的更改,就很好理解4的内容了
- 5和6由const将a和*都修饰,故无法指向别的常量也无法修改指向的值
2.const修饰引用
引用在指向某个常量的时候需要用const修饰,如下:
int &a = 10;
其中10是常量,可以看做是通过const修饰的变量,而int &a无不变量指定,须有const修饰,两边类型平等,才不会报错
总结:
- const int & a; 修饰引用不可对变量进行更替,同时引用的变量其值也无法更改,同理指针
3.const修饰成员变量
const修饰类的成员函数,表示成员变量,不能被修改,同时**它只能在初始化列表中赋值**
类中成员函数在初定义的时候是不能初始化的,而const修饰之后是无法再进行更改的,那么在哪里进行初始化呢?即在构造函数后跟上初始化。
class A
{
const int a;//成员常量不能修改
A(int x):a(x){};//只能在初始化列表中赋值
}
总结:
- 修饰成员变量就是将成员变量变为常量,但在类中定义时不能进行赋值,通过初始化列表赋值
4.const修饰类的成员函数
当const修饰类的成员函数之后,该函数为类的常成员函数,它不会改变对象的成员变量。
普通的全局函数不可用const修饰
总结:
- 注意点有const在函数末尾添加,并且该成员函数不能改变成员变量
5.const修饰对象
const修饰的对象为常量对象,其中的任何成员都不能被修改,任何成员是指成员变量和成员函数
const修饰的对象只能访问类中的const函数
const修饰的对象可以访问public成员变量,但是不能够修改
有如
A a;
const A b = a;
对象b的成员函数就无法修改,同时也无法通过b.去访问非const成员函数
总结:
- 无法修改任何成员,只能访问public的成员变量,函数只能访问类中的const
6.const修饰函数的返回值
类似于const修饰普通变量以及指针
其中诸如
const int A();
const int *A();
分别对应修饰普通变量,和指针,详情看1
总结:
- 意义不大,类似于修饰普通变量和指针,是赋值操作
希望个人的一点挫见能帮助大家理解const的用法,不足的地方欢迎下方探讨