一,const的促进作用
表述自变量 const自变量具备类别,C++能展开巡查。#define宏表述没正则表达式,而已单纯的数组代替,无法展开巡查。const int a=100; // 采用constURL#define a 100 // 采用define
防止修正,起为保护促进作用,减少流程易用性void f(const int i){
i++; //error!
}
能节约内部空间,防止无谓的缓存重新分配const表述常量从编订的视角上看,而已得出了相关联的缓存门牌号,而并非像#define那样得出的是立刻数。const表述的自变量在流程代码操作过程中多于这份复本,而#define表述的自变量在缓存二个复本。二,操作方式符自变量与自变量操作方式符
1. 操作方式符自变量:无法修正操作方式符所对准的门牌号。在表述的与此同时要调用。
char * const a = &p; //操作方式符自变量。
*a = a; // 操作方式获得成功
a = &b; // 操作方式严重错误,操作方式符对准的门牌号无法发生改变
2. 自变量操作方式符:无法修正操作方式符所对准门牌号的内容。但能发生改变操作方式符所对准的门牌号。
const char * a; //自变量操作方式符。
char const * a; //同上
*a = a; //操作方式严重错误,操作方式符所指的值无法发生改变
a = &b; //操作方式获得成功
小结:
如果const位于*的右侧,则const就是修饰操作方式符本身,即操作方式符本身是自变量(操作方式符自变量) 如果const位于*的左侧,则const就是修饰操作方式符所对准的变量,即操作方式符对准自变量(自变量操作方式符);PS: 能将自变量操作方式符对准非const数据,而已无法用自变量操作方式符修正该数据的内容。
三,const的一些注意事项
允许把非const对象的门牌号赋给对准const对象的操作方式符(即自变量操作方式符)。将函数参数声明为常引用,减少效率与此同时防止其被修正。void func(const A &a)
如果不加引用,函数体内将产生A 类别的临时对象用于复制参数a,而临时对象的构造、复制、析构操作过程都将消耗时间。而const是为了防止引用对象被函数修改。
四,类中采用const
采用constURL展开说明的成员函数,称为常成员函数。其只能调用常成员函数和常数据成员。
class A
{
public:
A(int x) : num(x), b(x) {}
void fun(const A& a); //const修饰函数形参
int GetNum(void) const;//const修饰不修正成员变量的函数
void SetNum(int x);
A& operator=(const A& other); //const修饰成员函数的返回值和形式参数
const A operator*(const A& left, const A& right); //const 修饰成员函数的返回值
};
常成员函数的特点:
无法修正类的任何非静态数据成员; 无法调用类的任何非const函数; constURL能用于对重载函数的区分;PS: 对于类中的const成员变量要通过调用列表展开调用
参考资料:
https://github.com/Light-City/CPlusPlusThings/tree/master/basic_content/constgithub.com/Light-City/CPlusPlusThings/tree/master/basic_content/const