博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第二篇:尽可能使用 const
阅读量:5884 次
发布时间:2019-06-19

本文共 1199 字,大约阅读时间需要 3 分钟。

前言

       const 关键字是常量修辞符,如果要告知编译器某个变量在程序中不会发生改变,则可将其声明为 const。

       但,对 const 关键字的认识不能仅仅停留在这一层 - 它提供了很多更强大的功能。

       因此很多情况下 const 关键字的使用方法也不是简单的 const + 变量,其用法总的来说是比较灵活的。

指针的 const 关键字

       const 关键字出现在 * 左边或是右边定义出来的指针完全不同。

1 const int *pa = &a;

       这样的一行代码定义了一个指向整型变量 a 的指针 pa。

       其中 const 关键字的作用是说明你无法通过指针 pa 来修改变量 a 的值,此后 *pa = 1 这样的语句将被编译器报错。

1 int * const pa = &a;

       这样的一行代码同样定义了一个指向整型变量 a 的指针 pa。

       但这时 const 关键字跑到 * 右边来了,此时它的意义是说明指针 pa 本身无法发生改变,此后 pa++ 这样的语句将被编译器报错。

 迭代器的 const 关键字

       迭代器其本质,也就是个指针。

       但请看定义某个迭代器的语句:

1 std::vector
::iterator iter = v.begin();

       这个迭代器指向整型 vector 容器 v 的第一个元素。

       现在问题是,没有出现 * ,那么我如何控制这个指针是指向的元素不变,还是其本身不变呢?

       答案是,如果直接定义 const 迭代器,如下:

1 const std::vector
::iterator iter = v.begin();

       那么定义出来的指针其限制是指针本身不变,如同 const 放在 * 右边。那么如何定义一个指向内容不变,但指针本身可以变化的 const 迭代器呢?

       方法如下:

1 std::vector
::const_iterator cIter = v.begin();

       实际使用中你会发现,后一种迭代器使用频率很高,而第一种迭代器基本没啥作用,纯属卖萌的。

成员函数的 const 关键字

       将一个成员函数的声明末尾加上 const 关键字,可以为该成员函数添加一个约束 - 无法改变其所属对象中成员变量的值。

       这个用法很多人会忽略掉,但是它在调试中会发挥到很多意想不到的作用 :)

啰嗦几句

       1. 运算符的重载函数在很多情况下应当返回 const 类型。

       2. 成员函数的 const 版本和非 const 版本能够实现重载。

       3. const 成员函数的作用更大在于使操作 const 对象成为可能,这一点将在以后的文中提到并细致分析。

小结

       const 是个非常实用的关键字,对我们写出高效而健全的代码很有帮助,应当尽可能的去使用它,发挥它的作用。

转载地址:http://dzlix.baihongyu.com/

你可能感兴趣的文章
聊聊MongoDB - MongoDB索引介绍分享
查看>>
设计模式(10)状态模式(讲解+应用)
查看>>
从理论到实践,全方位认识DNS(理论篇)
查看>>
JIRA issue 中的标记语言(Textile)
查看>>
GhostBSD 19.04 发布,注重安全与稳定性的 FreeBSD 发行版
查看>>
开源软件受云服务商影响,共用条款终止开源滥用现象
查看>>
SQL 、 NoSQL 和 NewSQL 的优缺点比较
查看>>
自定义布局实现侧滑菜单1
查看>>
开源SQL-on-Hadoop系统一览
查看>>
【3-2 报名中】Apache RocketMQ 开发者沙龙 成都站
查看>>
Java后端学习路线图,你真的只需要这一张!
查看>>
C++进程间通信的十一种方法
查看>>
通过DataWorks数据集成归档日志服务数据至MaxCompute进行离线分析 ...
查看>>
[MySQL] ibtmp文件过大怎么处理?
查看>>
分享几款Unity脚本插件 解决跨平台输入控制难题 ...
查看>>
报表也可以根据单元格计算后结果进行排序
查看>>
ACM MM 论文 | 用于行人重识别的多层相似度感知CNN网络 ...
查看>>
如何利用 CSS 动画原理,在页面上表现日蚀现象
查看>>
Redis分布式锁的正确实现方式
查看>>
Linux找回缺少的命令
查看>>