const用法详解

来源:互联网 发布:ummy mac 破解 编辑:程序博客网 时间:2024/06/12 03:33

这篇是复习时,参考《C++语言程序设计(第四版)》写的学习笔记。可能对个人的意义更大一些。都是很基础的知识,不适合已经熟练使用了编程语言的人看。就这样。

首先,const的使用意义在于,完美的解决了数据共享与保护的问题。所以个人觉得还是面向对象编程很重要的一个部分。

常对象,就是给类的对象加个const呗。规矩还是有几个但是相对简单。
第一、常对象必须初始化,就是在定义的时候就必须给他赋值。为啥子?因为常对象从定义开始就不能被修改数据了,如果定义的时候不给值就再也赋不了值。就相当于你取了一个名字,但是这个名字不属于任何人,那这个名字还有什么意义?
第二、写法。const写在类型说明符的前面后面都是可以的。
第三、常对象不能调用类的函数成员。当然常成员函数除外,下面说。

常成员函数,讲真,这玩意平时练习真的不怎么用,不过那全是因为我垃圾咯。教程说,对于无需改变对象状态的成员函数都应当使用const。说得再直白一点,几乎所有的成员函数都应该加const,对于我自己这种初学者来说就是这个意思了。
但常成员函数有意思的地方在于重载的情况。首先要知道,const也是一种重载方式。然后,如果是常对象调用的话,必然是调用也带const的成员函数咯。但如果是常对象调用的话,对象将优先调用不带const的函数。没错,常成员函数在这里被冷落了。

常数据成员,当然,类内的常数据成员也是“动不得”的。那它也要像常对象一样定义时就完成初始化吗?答案是,NO。好吧,这里其实暴露了两个问题,交代常数据成员分两步,一步时在类内完成声明,注意,那叫声明不是定义;第二步,在类外定义并且初始化,而且必须通过初始化列表来获得初值。
是不是所有的常数据成员都要这样两步呢?不是的,但需满足两个条件,一、带static;二、int型或者枚举类型。满足这两个条件的常数据成员可以直接一步到位。(原因就不说了,我也没看懂,只知道是C++标准规定的)

常引用,说实话我都不知道有这个东西。
常引用有一个不可替代的功能,那就是引用常对象。这个时候,常引用还是常对象的知识,拿不到类的非const成员函数,不能修改数据。
不可小视常引用的价值,首先,引用传递本身就比值传递有效率上的优势。其次,对于保护数据非常有价值。

const用来修饰指针的情况也相当麻烦,目前还在学习中。

0 0