1.只要这(某值保持不变)是事实,就应该确实说出来,这样可以获得编译器的协助,确保这条约束不被违反。

2.keyword const 有很多种用法,但都简单易用。

2.1classes 外部修饰global/namespace作用域中的常量。

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

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

2.4对于指针,可以指出ptr自身、ptr所指物或者两者都(或都不)是const。

这里不清楚static跟 const关系???一般不是static 跟dynamic有对比关系吗?

eg:

char greeting[] = "hello";

char* p = greeting ; //non-const pointer,non-const data

const char * p = greeting ; // non-const pointer,const data

char* const p = greeeting ; //const pointer , non-const data

const char * const p = greeting;  // const pointer , const data

char const * const p  = greeting ; // const pointer , const data

void f1(const widget * pr);

void f2(widget const * pr);//都是被指物为const

通过例子,可以区分何时表示被指物和指针本身是常量。

3.STL迭代器:

这个不是太懂,之前对STL了解比较少???

4.函数声明时应用:

const 可以与 函数返回值、各参数、函数自身产生关联。

4.1const 函数返回值,降低低级错误的意外,而且不影响安全性和高效性。

a*b = c;//试图改变*运算符的结果,再强行赋值为c.

if(a*b=c);//把==写成=

4.2const 成员函数

确认该成员函数可作用于const对象。

4.2.1 可以迅速了解那些成员函数可以改动对象内容。

4.2.2 使函数操作const对象成为可能。

两个成员函数如果只是常量性(constness)不同,可以被重载的。《====文中大量篇幅阐述这个特性。

一个类中同时存在const和constness同名函数。那么const object call const member function .constness object call constness member function.

4.2.3 bitwise const(physical constness) 和 logic constness

这里最后引出了解决方法: mutable(可变的) 。这个迅速扫一遍,看懂了,觉得没啥。不过又忘掉了???

5.casting(转型)

这个不是太熟悉,static-cast / const-cast /dynamic-cast ...

const成员函数承若绝对不改变其对象的逻辑状态(logic state),noo-const 成员函数没有此承若。

NOTE:

1.将某些东西声明为const 可以帮助编译器侦测出错误的用法。const可以被施加于任何作用域的对象、函数参数、函数返回值、成员函数本体。

2.编译器强制实施bitwise constness,但你编写的程序时应该使用“概念上的常量”(conceptual constness)(这点已经忘了,虽然看懂了!!!)

3.当const 和 non-const 成员函数有着等价的实现时,令non-const版本调用const版本可以避免代码重复。(这个其实函数重载吧!!)

条款3:尽可能使用const(use const whenever possible)的更多相关文章

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

    如果关键字const出现在星号左边,表示被指物是常量:如果出现在星号右边,表示指针自身是常量:如果出现在星号两边,表示被指物和指针两者都是常量. char greeting[] = " he ...

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

    (整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 关键字const多才多艺,语法变化多端.关于const的基本用法 ...

  3. 《Effective C++》读书笔记 条款03 尽可能使用const 使代码更加健壮

    如果你对const足够了解,只需记住以下结论即可: 将某些东西声明为const可帮助编译器侦测出错误用法,const可被施加于任何作用于内的对象.函数参数.函数返回类型.成员函数本体. 编译器强制实施 ...

  4. 条款21: 尽可能使用const

    对指针来说,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const,还有,两者都不指定为const: char *p = "hello"; ...

  5. 条款03:尽肯使用const

    定义常量 define 是一个Compile-Time的概念,它的生命周期止于编译器期,它存在与程序的代码段,在实际程序中它只是一个常数.一个命令中的参数.并没有实际的存在 const常量存在于程序的 ...

  6. 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象, const 指针和指向 const 对象的指针, const 对象的引用

    [源码下载] 不可或缺 Windows Native (18) - C++: this 指针, 对象数组, 对象和指针, const 对象,  const 指针和指向 const 对象的指针, con ...

  7. int *const && int const * && const int *的区别

    ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰 比如:const int a int const a 以上两种声明方式是一样的,我们不需要考虑const和in ...

  8. 【转】深入理解const char*p,char const*p,char *const p,const char **p,char const**p,char *const*p,char**const p

    一.可能的组合: (1)const char*p (2)char const*p (3)char *const p(4)const char **p (5)char const**p (6)char ...

  9. char const*, char*const, const char *const的区别

    C++标准规定,const关键字放在类型或变量名之前等价的.所以,const char*和 char const*是一样的. const char*   //常量指针---指向常量的指针----指针指 ...

随机推荐

  1. PHP数组直接相加和array_merge的区别

    array_merge是很常用的数组合并函数,但是两个数组直接相加对开发也是很有帮助的,两者之间有什么差别,这里记录一下: 首先是以数字为索引 array_merge会将两个数组按照先后顺序组成一个新 ...

  2. spring MVC 文件上传错误

    1.The request sent by the client was syntactically incorrect () http://luanxiyuan.iteye.com/blog/187 ...

  3. Linux文件和目录的777、755、644权限解释

    Linux文件和目录的权限 1.文件权限 在linux系统中,文件或目录的权限可以分为3种: r:4 读 w:2 写 x:1  执行(运行)-:对应数值0 数字 4 .2 和 1表示读.写.执行权限 ...

  4. printf格式化输出参数

    1.类型 类型字符用以表示输出数据的类型,其格式符和意义如下表所示: 格式字符 意义 d 以十进制形式输出带符号整数(正数不输出符号) o 以八进制形式输出无符号整数(不输出前缀0) x,X 以十六进 ...

  5. 关于itchat用法的一篇博文

    itchat的原理就是利用爬虫爬取了网页版微信的内容,并进行一系列的操作,运用微信,通过手机与电脑时登录的互通性,可以实现用微信对电脑的操作,通过itchat.msg_register方法,可以得到目 ...

  6. FACVSPOW - Factorial vs Power 数学方法 + 二分

    http://www.spoj.com/problems/FACVSPOW/ 求解n! > a^n最小的整数n 对于有n!和a^n的东西,一般是取ln 然后就是求解 (ln(1) + ln(2) ...

  7. DNS练习之正向解析

    配置正向解析: 主机名:sishen63 主机IP:192.168.1.63 操作系统:Red Hat Enterprise Linux Server release 6.5 (Santiago) 安 ...

  8. LVS集群-DR模式

    同上个实验一样,还是准备三台机器 分发器(sishen_63):eth0 192.168.1.63 RealServer1sishen_64) RealServer2sishen_65) 首先配置网卡 ...

  9. 搭建一个高可用的redis环境

    一.环境准备 我的环境: Fedora 25 server  64位版 6台: 192.168.10.204 192.168.10.205 192.168.10.206 192.168.10.203 ...

  10. WIN2003 IIS相关错误解决方案

    我碰到的主要问题是:“Server Application Unavailable 错误”.“无法显示网页”: 1.如果你的.NET版本是2.0及以上的话,那要注意了:win2003是默认安装1.1的 ...