C++笔记(2):const限定符的用法

1.定义和初始化

a).const限定符的作用是把一个对象转换成一个常量,const的使用在一定程度上可以提高程序的安全性和可靠性。

const int bufSize = 512; 
int const bufSize = 512; 

以上两种定义完全是等价的,都使得bufSize成为一个值为512的常量,但它仍是一个左值,只是不能修改而已。 需要注意的是,由于常量在定义后就不能被修改,所以定义时必须初始化。

b).使用其他已有值的变量也可初始化const变量。

int cnt = 0; 
const int sz = cnt; //cnt是一个右值,sz绑定了这个值

c).非const变量默认为extern,而const变量则不是。要使const变量能够在其他的文件中被访问,必须显示地指定为extern。

2.引用

a).const引用是指向const对象的引用,不能通过使用const引用来修改所绑定的对象,非const引用不能绑定到const对象。

const int i = 256; 
const int &r1 = i;    //正确 
int &r2 = i;          //错误:非const引用不能指向const对象 

b).const引用可以绑定到不同但相关的类型的对象或右值,比如:

const int &r = 100;      //绑定到字面值常量 
int i = 50; const int &r2 = r + i;   //绑定到右值 
double dVal = 3.1415;   
const int &ri = dVal;    //整型引用绑定到double类型   

编译器会把后面两行情况中的代码转换成如下形式的编码:  

int temp = dVal;        // 创建一个临时变量temp   
const int &ri = temp;   // ri与temp的值绑定 

3.指针

a).指向const对象的指针 const限定了这种指针所指向对象必须是const的,而指针本身不是。也就是说可以修改cptr使其指向另一个const对象,但不能通过cptr修改所指向对象的值。而非const指针不能指向const对象。

const int i = 128; 
const int *cptr = &i;    //正确 
int *ptr = &i;           //错误:ptr不是const指针 

允许把非const对象的地址赋给指向const对象的指针,例如:

double dVal = 3.14;          
const double *cdptr = &dVal; 

此时可以修改dVal的值,但不能通过cdptr修改dVal的值。可以这么说,指向const对象的指针“自以为指向了const对象”。

b).const指针 不能修改const指针指向的对象,但可以通过该指针修改所指向对象的值。

int iVal = 10; 
int *const rVal = &iVal; 
*rVal = 20;    //正确; 

c).指向const对象的const指针 既不能修改指针所指向对象的值,也不能修改指针的对象。

const double pi = 3.14159; 
const double *const pi_ptr = π 

d).typedef

typedef string *pstring; 
const pstring cstr;

这里的第二行其实等价于:

string *const cstr; 

因为pstring是一个指向string类型对象的指针类型,const所修饰的是pstring,而非其所指对象。

 

关于const的用法就写到这里,其在函数中的应用会在 C++笔记(3):函数 中再进行讨论。

 

转载于:https://www.cnblogs.com/Paradox0224/p/3925452.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值