加载中…
个人资料
南冠彤
南冠彤
  • 博客等级:
  • 博客积分:0
  • 博客访问:415,028
  • 关注人气:59
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

(转)C++ Tips(2): Regarding Const

(2011-05-24 15:25:19)
标签:

杂谈

分类: CPP/C

今天的内容是const. 有几点不得不说:

const是compile-time的,不影响runtime.所以不会影响效率
对于传参数中用到const,  在值类型时不需要使用, 因为值类型始终会有个拷贝,所以加了const也没用, 只需要在传指针和引用时使用.
在const的对象上只能调用const的成员方法.
const会加入方法的重载决议, 所以可以针对const的版本进行重载.
int*隐式转const int*允许, 而const int* 隐式转int*不允许
const指针仅仅保证无法通过这个指针改变指针指向的对象,而不是说那个对象不能改变.
const int*  p 是说明 *p无法改变, 而不是说*p要赋给一个const.
对于const int** p, c++有额外的保证, 考虑如下代码:
view plaincopy to clipboardprint?
class Foo {  
 public:  
   void modify();  // make some modify to the this object  
 };  
   
 int main()  
  
   const Foo x;  
   Foo* p;  
   Foo const** q = &p;  // q now points to p; this is (fortunately!) an error  
   *q = &x;             // p now points to x  
   p->modify();         // Ouch: modifies a const Foo!!  
   ...  
  
class Foo {
 public:
   void modify();  // make some modify to the this object
 };
 
 int main()
 {
   const Foo x;
   Foo* p;
   Foo const** q = &p;  // q now points to p; this is (fortunately!) an error
   *q = &x;             // p now points to x
   p->modify();         // Ouch: modifies a const Foo!!
   ...
 

所以int**无法隐式转为const int**(这个不同于int*), 解决这个问题的方法是把const int** 改成 const int* const*

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/daeees/archive/2010/07/27/5769459.aspx

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有