[Effective C++]条款03:尽可能使用const

关键字const出现在星号*左边,表示被指物是常量;

如果出现在星号*右边,表示指针自身是常量;

如果出现在星号*两边,表示被指物和指针两者都是常量。

char greeting[] = “Hello”;  
char *p = greeting;                 //non-const pointer, non-const data  
const char *p = greeting;           //non-const pointer, const data  
char *const p = greeting;           //const pointer, non-const data  
const char *const p = greeting             //const pointer, const data  

声明迭代器为const就像声明指针为const一样,表示迭代器不得指向不同东西,但所指的值可以改动。

std::vector<int> vec;  
const std::vector<int>::iterator iter = vec.begin();            //iter的作用像个T* const  
*iter = 10                                          //没问题,改变iter所指物  
++iter;                                                 //错误! iter是const  
const std::vector<int>::const_iterator cIter = vec.begin();     //cIter的作用像个const T*  
*cIter = 10                                                     //错误! *cIter是const  
++cIter;                                                        //没问题,改变cIter 

将返回值声明为const,避免它被当作左值,预防不必要的赋值动作;

class Rational {…};  
const Rational::operator* (const Rational& lhs, const Rational& rhs) ;
成员函数声明为const,确认该成员函数可作用于const 对象;

    一、使class接口比较容易被理解;

    二、使“操纵const对象”称为可能。


参数声明为const,避免它修改
成员函数声明为const,确认该成员函数可作用于const 对象(const对象只能调用const 成员)

编译器强制实时bitwise constness,但编写程序使应该使用“概念上的常量性”(conceptual constness)

当const和non-const成员函数有着实质等价的实现是,令non-const版本调用const版本可避免代码重复

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值