C++ 中的 const(指针常量与常量指针)

2023-02-02 0 267

一,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

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务