《Effective C++》学习笔记条款03 尽可能使用const

                                         条款03:尽可能使用const


 1、const允许你告诉编译器和其他程序员某值应保持不变,只要某值确实是不该被改变的,那就该确实说出来。
   
     关键字const多才多艺:


   
 例:
        char greeting[] = "Hello";
        char *p = greeting;    //指针p及所指的字符串都可改变;
        const char *p = greeting;    //指针p本身可以改变,如p =&Anyother;p所指的字符串不可改变;
        char * cosnt p = greeting;    //指针p不可改变,所指对象可改变;
        const char * const p = greeting;    //指针p及所致对象都不可改变;


    
 说明:

  • 如果关键字const出现在星号左边,表示被指物事常量。const char *p和char const *p两种写法意义一样,都说明所致对象为常量;
  • 如果关键字const出现在星号右边,表示指针自身是常量。   

 2、STL例子:
       
 const std::vector<int>::interator iter = vec.begin();//作用像T *const,++iter 错误:iter是const
        std::vector<int>::const_iterator cIter= vec.begin();//作用像const T*,*cIter = 10 错误:*cIter是const
   
 以下几点注意:

  • 令函数返回一个常量值,往往可以降低因客户错误而造成的意外,而不至于放弃安全性和高效性。

    例:const Rational operator* const Rational &lhs, cosnt Rational &rhs;

  • const成员函数使class接口比较容易被理解,它们使“操作const对象”称为可能;

    说明:声明为const的成员函数,不可改变non-static成员变量,在成员变量声明之前添加mutable可让其在const成员函数中可被改变。


   
 const_cast<char&>(static_cast<const TextBlock &>(*this))[position];
    //
static_cast TextBlock &转为constTextBlock &
    //
const_cast将返回值去掉const约束;


 3、 请记住:

  • 将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体;
  • 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的车辆”(conceptual constness);
  • cosntnon-const成员函数有着实质等价的实现时,令non-const版本调用const版本可避免代码重复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ccwRadar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值