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. Hibernate绑定session保证session为单线程操作

  2. SAE上无法加载css等文件

    如果你的SAE用到了这些文件,你会发现本地虽然能够运行成功,但是SAE上却无法加载. 其实就是地址发生了变化,我们告诉SAE这些东西怎么找就可以了. 例如我的css和js文件放在了app/static ...

  3. Qt样式表之二:QSS语法及常用样式

    一.简述 Qt样式表(以下统称QSS)的术语和语法规则几乎和CSS相同.如果你熟悉CSS,可以快速浏览以下内容.不熟悉的话可以先去W3School - CSS或者本人的CSS博客随笔简单了解一下. 在 ...

  4. POJ244Set Operation(bitset用法)

    Bryce1010模板 /* 题意:给出n个集合(n<=1000),每个集合中最多有10000个数, 每个数的范围为1~10000,给出q次询问(q<=200000), 每次给出两个数u, ...

  5. 洛谷 P2398 GCD SUM || uva11417,uva11426,uva11424,洛谷P1390,洛谷P2257,洛谷P2568

    https://www.luogu.org/problemnew/show/P2398 $原式=\sum_{k=1}^n(k\sum_{i=1}^n\sum_{j=1}^n[(i,j)=k])$ 方法 ...

  6. 506 Relative Ranks 相对名次

    给出 N 名运动员的成绩,找出他们的相对名次并授予前三名对应的奖牌.前三名运动员将会被分别授予 “金牌”,“银牌” 和“ 铜牌”("Gold Medal", "Silve ...

  7. 10.JAVA-接口、工厂模式、代理模式、详解

    1.接口定义 接口属于一个特殊的类,这个类里面只能有抽象方法和全局常量  (该概念在JDK1.8之后被打破,在1.8后接口中还可以定义普通方法和静态方法,在后续章节会详讲) 1.1 接口具有以下几个原 ...

  8. CF385C Bear and Prime Numbers

    思路: 需要对埃氏筛法的时间复杂度有正确的认识(O(nlog(log(n)))),我都以为肯定超时了,结果能过. 实现: #include <bits/stdc++.h> using na ...

  9. CF765C Table Tennis Game 2

    题意: Misha and Vanya have played several table tennis sets. Each set consists of several serves, each ...

  10. ios app跳转拨打电话界面,调用拨打电话功能

    DNLogFUNC //两种方法都可以用 //这种据说是可以上appstore NSURL *phoneURL = [NSURL URLWithString:[NSString stringWithF ...