关于const 限定符总结

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是一个常量指针,所指向的对象是一个双精度浮点型常量。




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值