C++ const 关键字的简单总结

C++ const 关键字的简单总结

作者:未知 更新时间:2012-12-13 11:06:03 来源: 【字号: 大 中 小】 浏览 30
[导读]C++程序员面试时十有八九会碰到const的问题,所以为了能快点找到工作,还是要了解一下const的用法

C++程序员面试时十有八九会碰到const的问题,所以为了能快点找到工作,还是要了解一下const的用法  

1. 用const修饰非指针变量,这是最简单的情况 

[cpp] view plaincopyprint?const int a = 10;   
int const b = 20;   
   
a = 11;                 // error C3892    
b = 21;                 // error C3892   

    const int a = 10; 
    int const b = 20; 

    a = 11;                 // error C3892 
    b = 21;                 // error C3892加了const以后,a,b两个变量都变成read only的变量,试图修改其变量值的代码在编译时会出错。const int和int const是一样的,const前后顺序无所谓。 

  

2. 当const和指针纠结在一起的时候,情况变得有点混乱 

定义const变量的指针,指针指向的内容为read only 
[cpp] view plaincopyprint?char buf1[32];   
char buf2[32];   
   
const char *p = buf1;   
//char const *p = buf1;     // same as above    
//const (char*) p = buf1;   // error C4430    
   
p = buf2;                   // OK    
*p = ’A’;                   // error C3892   

    char buf1[32]; 
    char buf2[32]; 

    const char *p = buf1; 
    //char const *p = buf1;     // same as above 
    //const (char*) p = buf1;   // error C4430 

    p = buf2;                   // OK 
    *p = ’A’;                   // error C3892const char和char const是一样的,注意const (char*) p这种写法是错误的,至少MS的编译器是这么认为的 
  

指针自己为const变量,自己是read only 
[cpp] view plaincopyprint?char buf1[32];   
char buf2[32];   
   
char* const p = buf1;   
//char *const p = buf1;     // same as above, but looks weird    
   
p = buf2;                   // error C3892    
*p = ’A’;                   // OK   

    char buf1[32]; 
    char buf2[32]; 

    char* const p = buf1; 
    //char *const p = buf1;     // same as above, but looks weird 

    p = buf2;                   // error C3892 
    *p = ’A’;                   // OKchar* const和char *const是一样的,*号随便和const及char中的哪一个放一起都无所谓,但*const看上去有点怪 

  

被指向的变量和指针都为const,即都为read only 
[cpp] view plaincopyprint?char buf1[32];   
char buf2[32];   
   
const char* const p = buf1;   
   
p = buf2;                   // error C3892    
*p = ’A’;                   // error C3892   

    char buf1[32]; 
    char buf2[32]; 

    const char* const p = buf1; 

    p = buf2;                   // error C3892 
    *p = ’A’;                   // error C3892  

 总结:关键看*号的位置,const在*号前的是const变量的指针,const在*号后的指针本身为const。不必绞尽脑汁去考虑const char和char const的区别,其实它们没有区别 

  

3. 函数参数中出现const,情况和2类似 

4. 类的成员函数为const 

    牢记:标记为const的函数不修改data member的值,不能调用不是const的函数 

但愿没有误导别人,但愿读MSDN时没看走眼

成都c++培训成都嵌入式培训成都软件测试培训,就来成都达内,专业铸就品质,如果你对达内培训怎么样达内培训需要多少钱心存疑惑,请访问我们达内网站(http://www.sctarena.com)进行咨询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值