条款03:尽可能使用const
条款02讲完了,条款03就针对02中提到的 const 关键字进行了用法上进行了拓展解释。
const 关键字:只要一个变量前用const来修饰,就意味着该变量里的数据只能被访问,而不能被修改,也就是意味着“只读”。
const 关键字主要包括了如下几个应用方面:
a、const 修饰 变量;
b、const 与 STL迭代器;
c、const 在函数中的应用;
一、const 修饰 变量
在这一部分,基本就是条款02中提及的常量用法,把一个变量通过const修饰的方式变成常量,这里的变量,其实要涵盖指针的,在我的理解里,指针其实也是变量,是int型用来存储指向对象地址的特殊变量。
其重要的还是要记住怎么分析const修饰的作用域,经典的分析例子就是const修饰指针,就可以总结为:
const 在星号左边,被 指针指向的变量 为常量;在星号右边,则此指针本身是常量(指针指向的变量依然为变量)。
这样的修饰方式在某些文章中,也又别称,前者叫顶层 const ,底层 const,虽然个人觉得前后更贴切。
还有就是面向对象扩展出来的类成员常量。
类成员常量,表示成员变量在某个对象生存期内是常量,即在对象生成时给出常量值。
而在此对象生存期内,它的值是不能改变的,只能初始化,不能赋值。同一个类的不同对象,不同对象对应的常量数据成员的值可以不同。
常量成员变量只能初始化,其值只能在构造函数中设定,甚至不能在构造函数的函数体中通过赋值设定,只能在构造函数初始化列表中完成 。
二、const 与 STL迭代器
STL,是标准模板库的缩写,其中包含着六个主要部分,容器、算法、迭代器、仿函数、适配器和分配器;
STL 迭代器系以指针为根据塑模出来,所以迭代器的作用就像个T*指针,也因此迭代器同样具有只读的需求和设计。
std::vector<int> vec;
const std::vector<int>::iterator iter1 = vec.begin();
std::vector<int>::const_iterator iter2 = vec.begin();
一句话,按指针的用法来即可。
三、const 在函数中的应用
const在原来c语言函数中的应用,就是对函数进行只读限制,防止一些函数编写者不希望出现的变化。
但本书讨论的是c++,其讨论的部分就要考虑两个部分:改版C语言的一般函数部分 和 面向对象扩展的特殊函数(成员函数)部分。
1、一般函数应用
在一个一般函数里可以被const修饰的就两个部分:返回值和参数。
const修饰返回值,也就是调用函数的结果不希望被修改:
const int Fun(int i_iValue)