当前位置:C++技术网 > 资讯 > 数据类型:2 宏、常量、枚举、结构体和共用体对比分析之常量

数据类型:2 宏、常量、枚举、结构体和共用体对比分析之常量

更新时间:2015-06-23 16:59:42浏览次数:1+次

    第二篇  常量
    本篇接上一篇宏部分,继续讨论,如果没有看宏部分,请回头去看看,再看看本文,效果会更好。当然这系列的文章并不会是全面的语法讲解,而是在语法之外的思想上的理解和分析,但是都是基于语法,需要时会将相关语法说清楚。
    上篇也提到了常量,正是因为宏有常量特性,才安排在前面讲解。而常量,是本文讨论的重点。
    我们接触到的常量,基本就是这么理解的:就是在运行时不能修改其值,也就是,在运行时它的值是不能变的。常量就是固定的值,从始到终。
    就这些基本的定义,可是为什么很多朋友经常还是觉得这些感觉还没摸透呢?并不是说不知道常量是什么,也不是不知道常量怎么用,但是就是,很多时候,对于一些规定不理解,总是感觉不自在,总是受束缚一样。原因就是还是没有完全理解透彻,没有深入到设计这些东西的层面,只是会用,用好的层次。其实这样是不够的,因为很多时候,不懂得设计思想,用不活,也容易错在这些基本的东西。说去研究一下,又觉得没什么好研究的,不研究吧总还是有点雾乎乎的。如果你是这样的,那就恭喜你。本文可以多多少少给你一些解说,更主要会给你带来启发,让你更好的借鉴思考。这些描述其实也就是我自身的经历。当我这样总结过后,心里真的就能够感觉以及平常使用总结过的这些东西像小学的知识一样,也就无形中提高了自己的理解层次。
    一个认识误区就是以为这些司空见惯的东西没必要研究,这是很不对的。层次越高,对于什么东西都是以他的水平来认识的,如果水平高,看出的东西也多。也就是这些司空见惯的东西,研究出新东西,也就更好的促进我们平常的思维模式,提升思想水平。
    现在,我们来重新认识一下常量。站在设计的角度来看。常量既然造出来,就是需要使用的,而用在哪,怎么用,这在设计时就做好了充分考虑。自然,宏是不会替代常量的,只是两者有相通性而已。常量是相对于变量而产生,有时候事先提供的东西并不希望去修改,所以就希望有一个形式将其固定,防止修改,这就产生了常量。常量优于宏的地方就是其使用灵活,放哪都可以,且形式跟变量相似,更好接受。并且常量的存在可以是任意时间,在运行时可以造一个常量出来,变量也可以转变成常量以防止修改,但是宏则做不到,因为宏是编译器在编译时替换,运行前生成固定了。而常量则不然,可以在变量和常量间转换,这里的常量是一种逻辑的表示。还可以是在线程函数中创建常量。这些都是宏没法替代的。
    常量的特性就是不可在生成后更改,这是以const修饰符创建一个常量得到的常量,和强制转换得来的常量不一样,转换得来的还可以转换回去,这个只是借助常量的思想而已。我们使用const int i=0;这种形式得到的i是在生成后不可更改的,语言内核会保证这个特性。这样一来,使用常量时我们需要理解的是,创建常量时要马上初始化,这表示生成时就设定常量的值。除了初始化的外的都不可更改常量。但是我曾疑惑,初始化不就是在修改常量的值吗?其实这样理解就不对了。这是一个思想的层次了。只是在定义一个常量时以这样的形式可以规定常量的值,不然,初始化都不能规定常量的值,而是随机的一个值,那这样的常量有什么意义呢?只不过,常量的根本定义是在初始化后的时间来定义的,出生初始化后的所有时间都不能修改其值。而不是说从出生到灭亡都不能修改。既然造出一个东西肯定是要利用的,所以,定义必须是为我们服务的,因此就将相对的范围确定到合适的区间,保证既能够顺利的保证特性外,还能够为我们服务,使我们可以支配它们。所以,在使用时,应该自我潜意识强调这种思想,降低以后犯错误的几率。
    而在C++中,会遇到一个问题,那就是在类声明时,要定义常量。但是在类声明中又不能给常量初始化,那么此时就会出现矛盾。而如果放到构造函数中,给常量设定值就不是初始化了,而是赋值了。这样就和常量的定义冲突了。为了解决这种语法设计冲突问题,就提出了初始化列表。初始化列表的具体用途,此处不详述,请参考其他文章和资料。初始化列表就解决了不在构造函数中给常量赋值,但是也从一种角度来在常量和类定义找到一个平衡点。内部的实现就是将初始化列表的值在常量创建时就给常量初始化,这样,就既满足了常量的需求,又不违背类的定义,只是多了一种语法实现而已。
    而常量的基本用法,这里就不重复讲述了。那么在使用上,常量和宏基本类似,这种情况就常常给一些人一个错觉了,导致混淆。所以对于常量,始终理解一点,常量是在创建时初始化后再也不能修改其值的数据类型。而变量转换成常量,再转回变量,这其中则是借鉴了常量的思想而已,并没有真的称为常量,只是施加了一个常量特性限制,仅此而已。请牢牢将这些理解好,以后用到常量都会有一种清晰的感觉。