条款 03:尽可能使用const

  • 1、请记住
  • 2、原因
  • 3、const用法
    • 3.1、在classes外部修饰global或namespace作用域中的常量
    • 3.2、修饰文件、函数、或区块作用域中被声明为static的对象
    • 3.3修饰classes内部的static和non-static成员变量
    • 3.4、修饰指针
    • 3.5、如果被指物是常量
    • 3.6、声明迭代器为const

1、请记住

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

2、原因

const允许指定一个语义约束(指定一个“不该被改动”的对象),编译器会强制实施这项约束。

他允许你告诉编译器和其他程序员某值应该保持不变。

3、const用法

3.1、在classes外部修饰global或namespace作用域中的常量

3.2、修饰文件、函数、或区块作用域中被声明为static的对象

3.3修饰classes内部的static和non-static成员变量

3.4、修饰指针

可以指出指针自身、指针所指之物,或者两者都(或都不)是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在星号右边,表示指针自身是常量
const出现在星号两边,表示被指物和指针两个都是常量

3.5、如果被指物是常量

下面两个函数接受的参数是一样的

void f1(const Widget* pw);//f1获得一个指针,指向一个常量的(不变的)Widget对象void f2(Widget const* pw);//f2也是

不同的人,习惯不一样,但两种写法意义相同。

3.6、声明迭代器为const

表示这个迭代器不得不指向不同的东西,但他指向的东西的值是可以改变的。

如果希望迭代器所指向的东西不可以改动,需要的是const_iterator:

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

在一个函数声明式内,const可以和函数返回值、各参数、函数自身(如果是成员函数)产生关联。

条款 03:尽可能使用const相关推荐

  1. [Effective C++读书笔记]003_条款03_尽可能使用const

    参考同事博客:http://www.cnblogs.com/hustcser/archive/2012/10/19/2731085.html 转载于:https://www.cnblogs.com/a ...

  2. 【Effective C++ 条款03 笔记】尽可能使用const

    条款03:尽可能使用const 一.顶层const和底层const 区分一下: int a = 1; const int* pa = a;//底层const,a的值不能变 int b = 2; int ...

  3. char* 赋值 const char* 释放_Effective C++读书笔记之条款3:尽可能使用const

    点击上方蓝字关注我们 C++的const关键字会强制编译器实施保持某个值不变的约束,帮助你在编译期间就能发现错误,灵活使用const能提高代码质量还能避免不想被改变的值被修改.下面我将从const作用 ...

  4. C++尽可能使用const

    尽可能使用const const修饰变量 const修饰函数 const修饰成员函数 const修饰变量 如果变量本身不应该被修改,应该使用const修饰.这样编译器可以进行保护,确保这个变量不会被修 ...

  5. Effective C++ 条款03:尽可能使用const

    场景一 用于修饰指针 char greeting[] = "Hello"; char* p = greeting; // non-const pointer, non-const ...

  6. const 常量_条款03:尽可能使用const

    const 允许你指定一个语义约束(也就是指定一个"不该被改动"的对象),而编译器会强制实施这项约束. 1.const指针 如果关键字const出现在星号左边,表示被指物是常量:如 ...

  7. effective C++ 条款 3:尽可能使用const

    const 修饰指针:如果关键字const出现在星号*左边,表示被指物是常量,如果const出现在*右边表示指针自身是常量, 如果出现在两边表示被指物和指针都是常量: const std::vecto ...

  8. 【03】尽可能使用const

    1.为什么搞出const关键字? const指定一个语义约束,指定一个对象不可修改.如果一个对象不可修改,就应该说出来. 2.const与指针 const可以修饰指向之物,也可以修改指针本身.STL中 ...

  9. 【转】C++ const用法 尽可能使用const

    http://www.cnblogs.com/xudong-bupt/p/3509567.html C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不 ...

最新文章

  1. adobe aem_AEM中的单元测试(大声思考)
  2. python训练营免费领取-21天训练营丨Python量化投资打卡第五期!学完押金全返!...
  3. ThinkPHP CURD返回结果参考
  4. 创建应用服务器连接客户端
  5. 超越Android:探索Kotlin的应用领域
  6. java url headers,Java CloseableHttpResponse.getHeaders方法代码示例
  7. HAProxy负载均衡代理
  8. c15语言,Steam
  9. “熊猫烧香”有新变种 可自动下载病毒
  10. Plc编程入门基础知识,在短时间内如何学会编程
  11. unix文件中i节点
  12. ssm基于微信小程序校园商铺购物商城系统
  13. Spring Bean的生命周期自我记忆
  14. python制作热力图_python绘制热力图
  15. [Adaptive Autosar]深入理解--学习资料汇总
  16. 备份文档到云服务器,备份到云服务器
  17. js,jquery常用拼接html方法,js,jquery拼接字符串
  18. 搭建 Angular + Cordova + Ionic 集成开发环境
  19. AutoSAR开发的三种方法:自上而下式、自下而上式、混合式
  20. (React入门)ref

热门文章

  1. R语言基于mediation包行中介效应分析
  2. OracleRMAN备份与恢复之二:数据恢复
  3. 神奇兔子数列:斐波那契数列
  4. https://mp.weixin.qq.com/s/j7YdtmyuzBFRK1BViDtp2w
  5. [博创智联]创新创客智能硬件平台——超声波测距传感器
  6. mysql数据备份的三种方式
  7. 单片机开发教程3——串口发送MPU6050姿态角
  8. 华为2018年校园招聘机试题
  9. 蓝桥杯 排列数(DFS搜索)
  10. I.MX6U MMDC 控制器简介