1 const

  • 在引用中注意不能为常量绑定一个非常量的引用
  • 在指针中区分low-level consttop-level const

const通常用于定义常量,一经定义不许修改,且使用const必须初始化

情形一

当我们在使用某个函数时,不希望变量在函数内部被改变,则可以将形参定义为const形式

void function (const int value)

情形二

const和引用放在一起使用时要注意,常量值不可以绑定到非常量的引用上,但是非常量可以绑定到常量的引用上。

non-const -> const
const !-> non-const

非常量值绑定到常量类型的引用是因为编译器帮我们产生了一个const类型的临时变量,比如:

int i=1;
const int &value=i; //编译器行为
const int temp=i;
const int &value=temp;

情形三

如果我们需要一个指针指向常量时,那么这个指针也必须是常量类型,否则编译器会报错。另外在C++ Primer中我们可以看到low-level consttop-level const这样的概念,通过一个例子来理解

const int value=123;//top-level
const int *pvalue=&value;//low-level
*pvalue=456; //错误 const int value=123;
const int *pvalue=&value;
int vol_value=456;
pvalue=&vol_value;//正确

这里注意在第一段的程序里const修饰的并不是pvalue,而是外面的int部分,这里应该理解为一个指针pvalue指向const int类型,即它的指向类型不能变。由于其所指地址是常量属性,常量不允许被修改,所以会报错,但是指针pvalue还是可以改变所指方向的。

那么如果我们不希望指向常量的指针被修改,那么就应该让它成为top-level const,它所修饰的就是指针这个对象了,即如下所示

const int *const pvalue

区分top-level还是low-level并不是说看const在里面还是在外面,而是看他所修饰的是什么。对于指针这样的复合类型来说,如果修饰的是一个对象,那就是top-level,如果修饰的是基本类型,那就是low-level

最新文章

  1. php学习笔记-基础篇
  2. 检查sqlite数据库完整性
  3. Games:取石子游戏(POJ 1067)
  4. FLASH CC 2015 CANVAS 导出图片出现缩放问题
  5. 淘宝:OceanBase分布式系统负载均衡案例分享
  6. [转] POJ DP问题
  7. C#操作Word (2)-- 打开&关闭Word文档
  8. Eclipse颜色主题插件-Eclipse Color Theme
  9. 总结ASP.NET MVC Web Application中将数据显示到View中的几种方式
  10. python课时二
  11. Asp.Net Core 中无法使用 ConfigurationManager.AppSettings
  12. linux下Tomcat 安装后执行startup.sh,出现– Cannot find …bin/catalina.sh
  13. [转帖]Zoom
  14. mysql 开发进阶篇系列 15 锁问题 (总结)
  15. nodejs源码编译-mipse64el架构
  16. python自动化运维笔记1 —— 系统性能信息模块psutil
  17. NoSuchMethodError: ... addOnCompleteCallback
  18. linux下Ftp服务安装
  19. MySQL 8.0窗口函数
  20. VCL 中的 Windows API 函数(4): AdjustWindowRectEx

热门文章

  1. Software--Spring Boot--Contact 项目初期
  2. TypeScript 合并以及删除数组数据
  3. C语言所有的数据类型
  4. flutter List使用
  5. Activiti工作流引擎系列-第二篇
  6. WPF Binding表达式
  7. iOS设置textView的placeholder
  8. window.location.href 下载文件页面出现跳转 (重定向失效的问题)
  9. Promise顺序执行请求;Promise一个请求执行完成再执行另一个请求
  10. Excel如何默认禁用科学计数法?