顶层const:指针本身是一个常量

底层const:指针所指对象是一个常量

  • 顶层const可以表示任意的对象是常量,这一点对任何数据类型都适用,如算术类型、类、指针等
  • 底层const则与指针和引用等复合型的基本类型部分有关

指针类型既可以是顶层const也可以是底层const,这一点和其他类型相比区别明显:

int i = ;
int *const p1 = &i;//不能改变p1的值,顶层const
const int ci = ;//不能改变ci的值,顶层const
const int *p2 = &ci;//允许改变p2的值,这是一个底层const
const int *const p3 = p2;//靠右的const是顶层const,靠左的是底层const
const int &r = ci;//用于声明引用的const都是底层const

当执行对象的拷贝操作时,顶层对象不受影响:

i = ci;//正确:拷贝ci的值,ci是一个顶层const,对此操作毫无影响
p2 = p3;//正确:p2和p3指向的对象类型相同,p3顶层const的部分不影响

当执行拷贝操作时,拷入和拷出的对象必须具有相同的底层const资格,或者两个对象的数据类型必须能够转换。

非常量可以转换为常量,反之则不行:

int *p = p3;//错误:p3包含底层const的定义,而p没有
p2 = p3;//正确:p2和p3都是底层const
p2 = &i;//正确:因为int* 能转换成const int*
int &r = ci;//错误;普通的int &不能绑定到int常量上
const int &r2 = i;//正确:const int&可以绑定到一个普通int上

p3即是一个顶层const也是底层const,拷贝p3可以不在乎它是一个顶层const,但是必须清楚它指向的对象也是一个常量,因此不能用p3去初始化p,因为p指向是一个普通的(非常量)整数。

p3的值可以赋给p2,因为两个指针都是底层const。尽管p3也是一个常量指针,仅就这次赋值而言不会由什么影响。

顶层const的更多相关文章

  1. 第2章 变量和基本类型 附3---底层const和顶层const

    和英文版的对: As we’ve seen, a pointer is an object that can point to a different object. As a result,we c ...

  2. C++ 顶层 const

    我的主力博客:半亩方塘 本文的主要參考来源来自于:C++ Primer 中文版(第 5 版) 第 57 面至第 58 面 1. 顶层 const 与底层 const 概念 我们知道,指针本身是一个对象 ...

  3. C++中顶层const和底层const

    1. 顶层 const 与底层 const 概念 指针本身是一个对象,由于,指针实际相应着内存单元的一段存储空间,然而,指针所指向的也是一个数据对象,因此,指针是一个常量与指针所指向的是一个常量是两个 ...

  4. C++之const限定符(顶层const,底层const)

    作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7050815.html C++之const限定符(顶层const,底层cons ...

  5. c++ 顶层const与底层const

    底层const是代表对象本身是一个常量(不可改变):      顶层const是代表指针的值是一个常量,而指针的值(即对象的地址)的内容可以改变(指向的不可改变): #include <iost ...

  6. c++ primer 中讲的顶层const 和 底层 const 理解

    c++ primer 中讲的    顶层const 和 底层 const   以前没搞懂的顶层const和底层const,这次看了后感觉明白了. 首先,const是一个限定符,被它修饰的变量的值不能改 ...

  7. 顶层const和底层const

    As we’ve seen, a pointer is an object that can point to a different object. As a result,we can talk ...

  8. this指针、引用、顶层和底层const关系

    1.首先顶层const和底层const是围绕指针*p的说法.底层:const int *p,const不是修饰指针p,指针所指的值不能改变:顶层:int *const p,const修饰指针p,指针本 ...

  9. C++ const用法总结

    1 const分顶层const,底层const2 顶层const可以表示任意类型的对象是常量.eg:     const int i:i是一个整型常量    int *const ccc:ccc是指向 ...

随机推荐

  1. 漫谈php框架之中间件

    市面上常见的php框架有很多,最近因为有技术需求,所以对常见的php框架的中间件进行了一些了解.各个框架尽管在目标上对php框架的定义大同小异,但是在实现方式上却各有不同,且看下文: 定义 首先什么是 ...

  2. CSS文档统筹

    一.CSS文档统筹 1.整站里相同的CSS样式提取到一个样式表里,各个页面调用相同的样式文件即可: 2.网站较大的情况下一般会把网站的头部,尾部单独分离出来,包括样式文件: 1)根据页面类型分离文件 ...

  3. (BFS/DFS) leetcode 200. Number of Islands

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  4. pstack跟踪进程栈

    一:简介 这个命令可以显示每个进程的栈跟踪.pstack命令必须由相应进程的宿主或root运行.可以使用pstack来确定进程挂起的位置.此命令允许使用唯一选项就是进程的PID 这个命令在排查进程问题 ...

  5. day-17(基础加强)

    回顾: listener(了解) 监听器,监听javaweb中三个域对象 监听对象的创建和销毁 ServletContextListener 在项目启动的时候加载配置文件 ServletRequest ...

  6. 【强大知名的CAD绘图工具】AutoCAD 2019 for Mac

    以上图片来源于互联网分享,如涉及版权问题请联系作者删除. 文章素材来源:风云社区(www.scoee.com) 下载地址:风云社区(www.scoee.com)   [简介] AutoCAD 2019 ...

  7. awk统计文件大小

    在Linux系统中,经常会遇到某个目录下文件很多,要统计这些文件的空间大小.可以采用awk来实现.如下是实现这个功能的例子. vim sum.sh #!/bin/bash# sum.shcd //ba ...

  8. CodeForces920E 链表强优化BFS

    http://codeforces.com/problemset/problem/920/E 题意:求一个图的补图的连通分量个数以及每个连通分量里的点个数 如果这不是一个补图,BFS或者并查集可过,但 ...

  9. Uart串口

    title: Uart串口 tags: ARM date: 2018-10-20 16:38:28 --- Uart串口 和单片机的应用没什么区别,首先设置IO复用,设置波特率和数据位,以及中断相关的 ...

  10. oracle数据库的简单操作

    本操作是在oracle的11g版本中的操作 一.数据库登录操作: 如果是在服务器上登录oracle,需要先切换到oracle用户再进行登录 #切换到oracle用户 su - oracle #登录or ...