关于const 限定符总结

来源:互联网 发布:火星时代有网络班 编辑:程序博客网 时间:2024/06/03 12:35

1.初始化const 对象

目的:把一个对象转换成常量,不能被修改。

     const int bufsize=512;//定义后必须初始化               bufsize=0;//不能被修改

2.const 对象怎样在全文件中被使用

       const对象在默认的状态下,只能被本文件使用,但有时候在一个文件中定义const变量,在其他多个文件中能够声明和使用,采用在const 变量前加上extern关键字,这样就能实现上述的功能。
     //file_1.cc     extern const int bufsize=fcn();     //file_1.h     extern const int bufsize;

解析:file_1.cc定义并初始化bufsize,因为bufsize是常量,必须用extern加以限定才能被其他文件使用。file_1.h头文件的声明也是由extern 限定,其作用是指明bufsize的定义在其他文件中出现。

3.const的引用

①、必须用与该引用同类型的对象初始化(但是有一种情况除外,在②中介绍)
     int ival=1024;     int &refval=ival;//refval和ival是同一个类型

解析:引用在定义后要初始化,需要初始化的对象的类型必须和引用的类型保持一致。

     const int ci=1024;     const int &r1=ci;//正确,引用及其对应的对象都是常量     r1=42;//错误,r1是对常量的引用     int &r2=ci;//错误,试图让一个非常量引用指向一个常量对象。
解析:因为不允许直接为ci赋值,也不能通过引用去改变ci的值,所以对r2的初始化是错误的,因为与普通的引用不同的是:对常量的引用不能被用作修改所绑定的对象。
②、在初始化常量引用时允许用任意表达式作为初始值,只要表达式的结构能够转换成引用的类型。
    //ri 引用int型的数    double dval=3.14;    const int &ri=dval;

解析:上面的代码经过一下转换:
           const  int  temp=dval;//由双精度浮点数生成一个临时的整型常量
           const   int  &ri=temp;//ri绑定这个临时变量

4.指针和const限定符

①、指向const 对象的指针

a、指针指向const对象,不允许用指针来改变所指向的const对象的值。
     例如:
   const  double pi=3.14;//pi是常量,其值不能改变   double *ptr=pi//错误:ptr是普通指针   const  double  *ptr=pi//ptr可以指向双精度常量   *ptr=42;//不能给ptr赋值


b、把一个const对象的地址赋给一个普通的非const对象的指针
    例如:
   const  double pi=3.14159;   double  *ptr=pi//ptr是普通变量   const  ddouble  *cptr=pi//正确
c、允许把非const对象的地址赋给指向const对象的指针
     例如:
   double  dval=3.14;   const  double *cptr=&dval;//正确

②、const指针(const  point)

     例如:
   int  errnumb=0;   int *const curerr=&errnumb;//curerr将一直指向errnumb   const double pi=3.14159;   const  double *const  pip=pi//pip是一个指向常量对象的常量指针
解析:离curerr最近的符号是const,意味着curerr本身是一个常量对象,声明符中下一个符号是“*”,说明curerr是一个常量指针,最后该语句的基本类型是int型对象;与之相似,pip是一个常量指针,所指向的对象是一个双精度浮点型常量。




原创粉丝点击