之前的笔记搬运
什么是const关键字
const是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更改的。
const和宏区别:
const和宏的共同点:
1 | 必须初始化, 定义后的值不可更改, 一样有展开替换的过程 |
const和宏的不同点:
1 | const:有类型定义 |
综上所诉, const拥有宏所有的特性, 并且多了很多有利于代码稳定的特性,
所以在C++中建议不使用宏, 而使用const
const定义常量
- const修饰变量,以下两种定义形式在本质上是一样的。它的含义是:const修饰的类型为TYPE的变量value是不可变的。
1 | TYPE const ValueName = value; |
在C++隐式转换中, const char不可以转换成char, 而char却可以转换成const char,
可以得出: 高安全性类型不可以转低安全类型, 低安全性类型可以转高安全性类型,
使代码更安全, 编译器可以通过.
const定义指针
- 指针本身是常量不可变
1 | char* const pContent; |
- 指针所指向的内容是常量不可变
1 | const char *pContent; |
- 两者都不可变
1 | const char* const pContent; |
也可以总结为:
如果const位于*的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量;
如果const位于*的右侧,const就是修饰指针本身,即指针本身是常量
const定义参数
传递过来的参数在函数内不可以改变(无意义,因为Var本身就是形参)
void function(const int Var);
参数指针所指内容为常量不可变
void function(const char* Var);
参数指针本身为常量不可变(也无意义,因为char* Var也是形参)
void function(char* const Var);
参数为引用,为了增加效率同时防止修改。修饰引用参数时:
void function(const TYPE& Var); //引用参数在函数内为常量不可变
//本身引用定义参数时是不支持常量传递的, 通过const修饰后, 就可以传递常量了,
其原理就是在调用者的栈空间申请一块const type属性的内存,
把这块内存的地址做为参数传递给被调用者, 也就是void function(const TYPE&
Var);这个函数