Const的几大用法(常用)

2022-12-21 0 994

那时来看一看const的用语。

第三:常表达式

表达式用const润色,其值严禁被发生改变。任何人发生改变此表达式的标识符单厢造成校对严重错误。Const加在正则表达式其间均可。

比如:

void main(void) { const int i = 10; //i,j都用于常表达式 int const j = 20; i = 15; //严重错误,常表达式无法发生改变 j = 25; //严重错误,常表达式无法发生改变 }

第三:常操作符

const跟操作符一同采用的这时候有三种方式。

const需用来限制操作符不容变。换句话说操作符对准的物理门牌号不容变,但能随便发生改变该门牌号对准的缓存的文本。

int main(void) { int i = 10; int *const j = &i; //常操作符, 对准int型表达式 (*j)++; //能发生改变表达式的文本 j++; //严重错误,无法发生改变常操作符对准的物理门牌号 }

const也需用来管制操作符对准的缓存不容变,但操作符对准的物理门牌号可变。

int main(void) { int i = 20; const int *j = &i; //操作符,对准int型常量 //也能写成int const *j = &i; j++; //操作符对准的物理门牌号可变 (*j)++; //严重错误,无法发生改变缓存文本 }

看完上面的两个例子,是不是糊涂了?告诉你一个诀窍,

在第三个例子中,const用来润色操作符j,j不容变(也就是对准int表达式的常操作符);

第三个例子中,const用来润色*j,*j不容变(也就是对准int常量的操作符)。

这三种方式能组合起来采用,使操作符和缓存文本都不容变。

int main(void) { int i = 10; const int *const j = &i; //对准int常量的常操作符 j++; //严重错误,无法发生改变操作符对准的门牌号 (*j)++; //严重错误,无法发生改变常量的值}

第三:Const和引用

引用实际上就是表达式的别名,这里有几条规则:

声明表达式时必须初始化

一经初始化,引用无法在对准其它表达式。

任何人对引用的发生改变都将发生改变原表达式。

引用和表达式本身对准同一内存门牌号。

下面的例子演示了以上的规则:

void main(void) { int i = 10; //i和j是int型表达式 int j = 20; int &r = i; //r 是表达式i的引用 int &s; //严重错误,声明引用时必须初始化 i = 15; //i 和 r 都等于15 i++; //i 和 r都等于16 r = 18; //i 和r 都等于18 printf(“Address of i=%u, Address of r=%u”,&i,&r); //物理门牌号相同 r = j; //i 和 r都等于20,但r不是j的引用 r++; //i 和 r 都等于21, j 仍等于20 }

用const润色引用,使应用不容修改,但这并不耽误引用反映任何人对表达式的修改。Const加在正则表达式其间均可。

比如:

void main(void) { int i = 10; int j = 100; const int &r = i; int const &s = j; r = 20; //错,无法发生改变文本 s = 50; //错,无法发生改变文本 i = 15; // i和r 都等于15 j = 25; // j和s 都等于25 }

第四:Const和成员函数

声明成员函数时,末尾加const润色,表示在成员函数内严禁发生改变该对象的任何人数据。这种模式常被用来表示对象数据只读的访问模式。比如:

class MyClass { char *str =“Hello, World”; MyClass() { //void constructor } ~MyClass() { //destructor } char ValueAt(int pos) const //const method is an accessor method { if(pos >= 12) return 0; *str = M; //严重错误,严禁修改该对象 return str[pos]; //return the value at position pos } }

第五:Const和重载

重载函数的这时候也能采用const,考虑下面的标识符:

class MyClass { char *str =“Hello, World”; MyClass() { //void constructor } ~MyClass() { //destructor } char ValueAt(int pos) const //const method is an accessor method { if(pos >= 12) return 0; return str[pos]; //return the value at position pos } char& ValueAt(int pos) //通过返回引用设置缓存文本 { if(pos >= 12) return NULL; return str[pos]; } }

在上面的例子中,ValueAt是被重载的。Const实际上是函数参数的一部分,在第三个成员函数中它管制这个函数无法发生改变对象的数据,而第三个则没有。这个例子只是用来说明const能用来重载函数,没有什么实用意义。

class MyClass { char *str =“Hello, World”; MyClass() { //void constructor } ~MyClass() { //destructor } char& operator[](int pos) //通过返回引用需用来更改缓存文本 { if(pos >= 12) return NULL; return str[pos]; } } void main(void) { MyClass m; char ch = m[0]; //ch 等于 H m[0] = M; //m的成员str变成:Mello, World }

创作不易,点赞+关注哦!!!

Const的几大用法(常用)
上一篇: Git中的分支

相关文章

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

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