关于C++ 顶层const和底层const对拷贝操作的影响
来源:互联网 发布:淘宝粉丝红包 编辑:程序博客网 时间:2024/06/05 03:03
最近看C++Primer,里面的顶层const和底层const有点让人搞混,现在总结出以下几点,问题就好解决了:
一、关于顶层const
执行拷贝操作时,顶层const不会有太大影响,但有两个例外:
①非常量引用不能绑定常量。
②非常量指针不能指向常量。
const int ival = 0;int &ri = ival;//错误,非常量引用不能绑定常量。int *iptr = &ival;//错误,非常量指针不能指向常量。
所以虽说ival是顶层const,但是上面那两个操作是非法的。
二、关于底层const
底层const在执行拷贝操作时的限制比较大,总结出两点:
①、当拷贝操作的右侧对象具有底层const是要求左侧对象也要有底层const资格(注意是右侧对象具有底层const的时候而不是左侧):
const int val = 0;//顶层constconst int &r= val; //左侧对象为底层const
想上面左侧对象为底层const,而右侧对象为顶层const,不要求为底层const,而且常量引用本身就可以绑定到常量对象上。
回看上面那段代码:
const int ival = 0;int *iptr = &ival;//错误,非常量指针不能指向常量。
ival是一个顶层const,const int 加取地址符&后变成const int *,变成了底层const,第二个语句右侧对象为底层const,而iptr为普通指针,不具有底层const的资格,所以拷贝是非法的,也可以这样解释。
②、非常量对象一般可以转换成常量,而反过来常量则不能转换成非常量。
int i = 0;const int &ri = i;
第二句中右侧对象i是非常量,而ri是常量,非常量一般能转换成常量,所以拷贝是合法的。
注意上面的转换,是右侧对象的转换,而不是左侧对象向右侧对象的转换。
弄清以上这几点,顶层const和底层const的问题也就好理解了。
0 0
- 关于C++ 顶层const和底层const对拷贝操作的影响
- C++Primer----顶层const和底层const
- 指针的顶层和底层const对指针的引用的影响
- 顶层const和底层const的理解
- “顶层const”和“底层const”的思考
- 顶层const和底层const的区别
- C++的顶层const和底层const
- 顶层const和底层const的说明
- 底层const和顶层const
- 顶层const和底层const
- 顶层const和底层const
- 顶层const和底层const
- 顶层const和底层const
- 顶层const和底层const
- 顶层const和底层const
- 顶层const和底层const
- 顶层const和底层const
- 顶层const和底层const
- Android UI设计(引导界面):ViewPager之三PagerTabStrip与PagerTitleStrip添加标题栏的区别
- mybatis笔记
- La3523 Knights of the round table
- Java内存回收
- MAC上安装使用KYLIN(OLAP工具)完整版
- 关于C++ 顶层const和底层const对拷贝操作的影响
- [Codeforces 697C] PLEASE (矩阵特征向量)
- 寻找【NOIP2016提高A组模拟7.17】
- usaco 2.2.2 subset
- hadoop平台安装搭建
- Objective-c中.m、.h、.mm文件
- 【JZOJ4637】大鱼海棠
- 【职坐标】java集合框架简介
- C#基础知识(六)——冒泡排序的书写