读写权限详解
admin
2024-05-16 06:19:48
0次

本篇博客主要通过三个问题来理清C/C++中的读写权限问题:

const变量可以赋值给非const引用吗?

const变量的地址可以赋值给非const指针吗?

const普通变量可以给非const普通变量赋值吗?

在此之前,我们得先明白读写权限的一个基本原理:读写权限只能缩小,不能放大。

现在我们先来看第一段代码:

int main()
{const int a = 0;const int a2 = 0;const int& r = a;int& r2 = a2;//报错return 0;
}

在上述代码中,第五行代码没有任何问题,因为变量a是const的,只能读不能写,赋值给引用变量r,我们依然只能通过引用r来读a,而不能通过引用r修改a,因此a的读写权限没有发生任何变化,所以第五行代码没有任何问题。

第六行代码中,a2也是const的,只能读不能写,将a2赋值给非const引用变量r2,非const引用变量r2是既可以读可以写的,那就可以通过r2修改a2,那么a2的读写权限就变大了,这是不被允许的,因此会报错。

通过这个例子,我们可以解决第一个问题:const变量可以赋值给const引用,但是const变量不能赋值给非const引用,因为这会造成const变量读写权限的放大,是不被允许的。

接着后面,我们来看第二段代码:

int main()
{const int a = 0;const int a2 = 0;const int* r = &a;int* r2 = &a2;//报错return 0;
}

在上面的代码中,第五行代码没有任何问题,变量a是const的,将它的地址赋值给const指针,我们依然只能通过指针r来读a,而不能通过指针r修改a,因此a的读写权限没有发生任何变化,所以第五行代码没有任何问题。

第六行代码中,a2也是const的,只能读不能写,将a2赋值给非const指针变量r2,非const指针变量r2是既可以读可以写的,那就可以通过r2修改a2,那么a2的读写权限就变大了,这是不被允许的,因此会报错。

通过这个例子,我们可以解决第二个问题:const变量的地址可以赋值给const指针,但是const变量的地址不能赋值给非const指针,因为这会造成const变量读写权限的放大,是不被允许的。

最后,我们来看第三段代码:

int main()
{const int a = 0;int b = a;return 0;
}

上述代码完全没有任何问题,尽管是const变量赋值给非const变量,但是赋值后,变量b是变量b,变量a是变量a,只是把a的值赋值给了b而已,除此之外,a和b没有任何关系,变量a的读写权限并没有任何变化,因此该段代码没有任何问题。

通过这个例子我们可以解决第三个问题:普通变量的赋值不会引起读写权限的改变。const普通变量可以赋值给const普通变量,const普通变量也可以赋值给非const普通变量。


 

相关内容

热门资讯

国庆假期河南重点景区共接待游客... “河南发布”消息,今年国庆假期,河南全省活动丰富、政策加力、场景焕新。重点监测零售企业累计实现销售额...
国庆假期中外旅游“双向奔赴”   新华社北京10月7日电 2026年国庆假期,中国游客走出国门,欣赏远方的风景;而外国游客从世界各...
长假尾声 游兴不减 10月7日,游客在浙江杭州西湖风景区游览。 新华社记者 徐昱 摄  国庆长假进入尾声,人们赏美景,品...
这座晋南古镇,在保护与烟火中复...   新华社太原10月7日电(记者邓浩然)“这有什么看头?”自幼在山西襄汾汾城长大的郑彦文,曾经面对汹...
瞰中国|湖北丹江口:夜游汉江乐... 国庆假期,湖北省丹江口市依托汉江两岸山水资源,推出系列夜游项目,多处景点联动开放,吸引四方游客前来打...
“外来客”首超八成,看,山东沂... 齐鲁晚报·齐鲁壹点 通讯员 郑树平今年国庆假期,山东红嫂家乡旅游区红色旅游火爆出圈。黄金周后盘点,大...
记者手记:千年盐田 古韵新生   新华社天津10月7日电(记者赵子硕)“呜——”汽笛轻鸣,这是天津长芦海盐文化旅游区今年国庆假期新...
成都崇州国庆期间设置“红黑榜”... 四川在线记者熊晓雨国庆假期,元通古镇游人如织,几块新设立的“红黑榜”引人注目。游客雷睿鑫感慨道:“红...
乐享假日时光,国庆期间超2.1... 这个国庆假期,各地公园举办丰富多彩的文化活动,超过2.1亿人次在公园乐享假日时光。白天赏秋,晚上夜游...
国庆出游“含城量”提升,美团:... “十一”假期进入尾声,不少游客踏上返程。10月7日,根据《美团2026国庆消费洞察报告》(以下简称《...