条款 03:尽可能使用const
条款 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、请记住
- 将某些东西声明为const可帮助编译器侦测出错误用法。const可被施加于任何作用域内的对象、函数参数、函数返回类型、成员函数本体。
- 编译器强制实施bitwise constness,但你编写程序时应该使用“概念上的常量性”(conceptual constness)。
- 当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相关推荐
- [Effective C++读书笔记]003_条款03_尽可能使用const
参考同事博客:http://www.cnblogs.com/hustcser/archive/2012/10/19/2731085.html 转载于:https://www.cnblogs.com/a ...
- 【Effective C++ 条款03 笔记】尽可能使用const
条款03:尽可能使用const 一.顶层const和底层const 区分一下: int a = 1; const int* pa = a;//底层const,a的值不能变 int b = 2; int ...
- char* 赋值 const char* 释放_Effective C++读书笔记之条款3:尽可能使用const
点击上方蓝字关注我们 C++的const关键字会强制编译器实施保持某个值不变的约束,帮助你在编译期间就能发现错误,灵活使用const能提高代码质量还能避免不想被改变的值被修改.下面我将从const作用 ...
- C++尽可能使用const
尽可能使用const const修饰变量 const修饰函数 const修饰成员函数 const修饰变量 如果变量本身不应该被修改,应该使用const修饰.这样编译器可以进行保护,确保这个变量不会被修 ...
- Effective C++ 条款03:尽可能使用const
场景一 用于修饰指针 char greeting[] = "Hello"; char* p = greeting; // non-const pointer, non-const ...
- const 常量_条款03:尽可能使用const
const 允许你指定一个语义约束(也就是指定一个"不该被改动"的对象),而编译器会强制实施这项约束. 1.const指针 如果关键字const出现在星号左边,表示被指物是常量:如 ...
- effective C++ 条款 3:尽可能使用const
const 修饰指针:如果关键字const出现在星号*左边,表示被指物是常量,如果const出现在*右边表示指针自身是常量, 如果出现在两边表示被指物和指针都是常量: const std::vecto ...
- 【03】尽可能使用const
1.为什么搞出const关键字? const指定一个语义约束,指定一个对象不可修改.如果一个对象不可修改,就应该说出来. 2.const与指针 const可以修饰指向之物,也可以修改指针本身.STL中 ...
- 【转】C++ const用法 尽可能使用const
http://www.cnblogs.com/xudong-bupt/p/3509567.html C++ const 允许指定一个语义约束,编译器会强制实施这个约束,允许程序员告诉编译器某值是保持不 ...
最新文章
- adobe aem_AEM中的单元测试(大声思考)
- python训练营免费领取-21天训练营丨Python量化投资打卡第五期!学完押金全返!...
- ThinkPHP CURD返回结果参考
- 创建应用服务器连接客户端
- 超越Android:探索Kotlin的应用领域
- java url headers,Java CloseableHttpResponse.getHeaders方法代码示例
- HAProxy负载均衡代理
- c15语言,Steam
- “熊猫烧香”有新变种 可自动下载病毒
- Plc编程入门基础知识,在短时间内如何学会编程
- unix文件中i节点
- ssm基于微信小程序校园商铺购物商城系统
- Spring Bean的生命周期自我记忆
- python制作热力图_python绘制热力图
- [Adaptive Autosar]深入理解--学习资料汇总
- 备份文档到云服务器,备份到云服务器
- js,jquery常用拼接html方法,js,jquery拼接字符串
- 搭建 Angular + Cordova + Ionic 集成开发环境
- AutoSAR开发的三种方法:自上而下式、自下而上式、混合式
- (React入门)ref