首页 > 代码库 > C++学习笔记 <const限定词>

C++学习笔记 <const限定词>

1、cons可以限定一个变量,是的它的值不能被改变

2、默认情况下,const对象仅在文件内有效。

        编译器在编译时,会把程序中所有用到const变量的地方替换成const的初始值,因此每个用到const变量的文件中都要有const变量的定义,为了支持这一用法,同时避免同一变量的多次定义,const对象被设定为仅在文件内有效,当多个文件中出现了同名的const对象时,等同于分别在每个文件中定义了独立的变量。如果要在不同的文件中使用同一个const变量,不管是const的声明还说定义都要在const之前加上extern关键字,这样就可以一次定义多次使用。

3、const与引用:

     可以把引用绑定到const对象上,就像绑定到其他对象上一样,我们称之为对常量的引用,与普通引用不同的是对常量的引用不能修改它所绑定的对象。

   ###//摘自C++primer  的一段话

    C++程序员们经常把“对const的引用”简称为“常量引用”,这一简称还是挺靠谱的,不过前提是你得时刻记得这就是个简称而已。

    严格来说,并不存在常量引用。因为引用不是对象,所以我们无法让引用本身恒定不变。事实上,由于C++语言并不允许随意改变引用所绑定的对象,所以从这层意义上理解所有的的引用又都算是常量。引用的对象市常量还是非常量可以决定其所能参与的操作,却无论如何都不会影响到引用和对象的绑定关系本身。

##########################

     一般引用的类型必须与其所引用的对象的类型一致,并且只能绑定在对象上,不能与某个表达式的计算结果绑定在一起,但是有两个例外。①在初始化常量引用时允许用任意表达式作为初始值,只要改表达式的结果能转换成引用的类型即可。尤其,允许为一个常量引用绑定非常量的对象、字面值,甚至是个一般表达式:

    例子:Double dval=3.14;     const int  &ri=dval;

     编译器在编译时代码转换成如下形式:  const int temp=dval;    const int &ri=temp;    //生成了一个临时量,const引用绑定到了这个临时量上。

    而非const引用不可以这样用。

4、对const的引用可能引用一个并非const的对象,常量引用仅对引用可参与的操作进行了限定,对于引用的对象本身是不是常量未进行限定。

5、指针和const

     与引用一样,也可以令指针指向常量或非常量。类似于常量引用,指向常量的指针不能用于改变其所指对象的值。要想存放常量对象的地址,只能使用指向常量的指针。

   const  int   a=1;

   int * b=&a;  错误。

   和常量引用一样,指向常量的指针也没有规定所指的对象必须是一个常量。所谓只想常量的指针仅仅要求不能通过该指针改变所指对象的值。

   ***指针和引用不同,指针本身是一个对象,因此可以把指针本身定位常量。常量指针必须初始化,而且一旦初始化,它的值(存放的地址)就不能再改变。把*放在const之前说明指针是一个常量。这样的书写形式隐含着一层以为,即不变的是指针本身的值,而不是指针所指向的那个值。

指针本身是个常量并不意味着不可以通过指针修改它所指向的那个对象。

C++学习笔记 <const限定词>