简单理解const
我们经常使用到const,简单来说,const就是不允许改变的意思。
C语言中的const:
它限定一个变量不允许被改变,产生静态作用。
C++中的const:
const 限定符,它把一个对象转换成一个常量。
const的作用
1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了;
2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;
3)在一个函数声明中,const可以修饰形参表明他是一个输入参数,在函数内部不可以改变其值;
4)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,不能修改类的成员变量;
5)对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为 “左值” 。
const的不同
修饰变量
- 变量的值不能改变
注:此时有两种写法是等价的:
1、const int a = 10
;
2、int const a = 10
;
简单示例:
可以看到这里,我们试图改变a和b的时候,下方出现了错误提示:
修饰指针
- 如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
- 如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量;
简单示例:
函数使用
- const 修饰函数参数
-
- void function(const int Var)
-
传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)
-
- void function(const char* Var)
-
参数指针所指内容为常量不可变
-
- void function(char* const Var)
-
参数指针本身为常量不可变(也无意义,因为char* Var也是形参)
-
- void function(const class& Var)
-
//引用参数在函数内不可以改变
-
- void function(const TYPE& Var)
-
//引用参数在函数内为常量不可变
- const 修饰函数返回值
-
- const int fun1()
-
这个其实无意义,因为参数返回本身就是赋值。
-
- const int* fun2()
-
我们可以把fun2()看作成一个变量,即指针内容不可变。
-
- int* const fun3()
-
我们可以把fun2()看作成一个变量,即指针本身不可变。
类中使用
关于类中的使用,分为两点:
1、const 修饰成员变量
2、const 修饰成员函数
注意:在成员函数后加const,其实是限定了this指针;
所以,const 不能 和 static 关键字同时使用,因为static关键字修饰静态成员函数,静态成员函数不含有this指针。
记忆小技巧
Bjarne 在他的《The C++ Programming Language》里面给出过一个助记的方法——“以 * 分界,把一个声明从右向左读”。
注意语法,* 读作 pointer to (指向…的指针),const (常量) 是形容词,char (变量类型) 和 p (变量名) 当然都是名词。
1)
const char * p
读作:p is a pointer to a const char
,
译:p 是一个指针(变量),它指向一个常量字符(const char)。
2)char * const p
读作:p is a const pointer to a char
,
译:p 是一个常量指针(const p),它指向一个字符(变量)。
参考资料
【1】scut_yp.c++中const的作用.CSDN.2019.04.04
【2】Eric_Jo.关于C++ const 的全面总结.CSDN.2009.04.30
【3】JPEXE.记住const的位置与区别.CSDN.2008.03.07
【4】C++中const(百度百科)