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. 用纯XMLHttpRequest实现AJAX

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. 关于AFNetWorking 2.5.4之后版本编译报错问题解决方案

    最近升级了AFN框架到2.6版本然后编译却出错了 错误如下: 错误出现在 AFSecurityPolicy.h 这个类中 解决办法如下: 在项目的.pch文件里添加 #ifndef TARGET_OS ...

  3. 「软件」仿站小工具v9.0

    仿站小工具是通过网址下载静态网页的工具.从输入的网址下载html代码,提取出JS.Css.Image.Picture.Flash等静态文件网址,再从下载完好的Css代码中提取出Image静态文件网址, ...

  4. hive的使用 + hive的常用语法

    本博文的主要内容有: .hive的常用语法 .内部表 .外部表 .内部表,被drop掉,会发生什么? .外部表,被drop掉,会发生什么? .内部表和外部表的,保存的路径在哪? .用于创建一些临时表存 ...

  5. 远程报:这可能是由于credssp加密oracle修正

    此错误解决办法 1.Win+R 输入regedit打开注册表 找到对应的以下目录HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion ...

  6. Java | 技术应用 | 利用Jsoup处理页面

    根据微信公众号的推文链接地址,对文章内容进行爬取,利用jsoup解析文章源代码,加上结合xpth提取文文章信息, 利用正则表达式读取文章发表时间. Jsoup <!-- jsoup HTML p ...

  7. Jumping on Walls CodeForces - 198B

    Jumping on Walls CodeForces - 198B 应该是一个隐式图的bfs,或者叫dp. 先是一个TLE的O(nklogn) #include<cstdio> #inc ...

  8. canvas绘图出现模糊,解决方法

    在项目开发中发现,canvas有一个问题,绘制的图会出现模糊现象. 解决方法之一:将canvas元素放大2倍,然后将整个canvas元素或者其父元素缩小两倍. <!DOCTYPE html> ...

  9. hadoop的安装和配置

    hadoop安装 在Apache Hadoop主页的下载页面https://hadoop.apache.org/releases.html选择版本进行下载: 下载下来的是压缩包: 将压缩包使用Xftp ...

  10. Android模板制作

    本文详细介绍模板相关的知识和如何制作Android模版及使用,便于较少不必要的重复性工作.比如我在工作中如果要创建一个新的模块,就不要需要创建MVP相关的几个类:Model.View.Presente ...