条款3:尽可能使用const(use const whenever possible)

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版本可以避免代码重复。(这个其实函数重载吧!!)

时间: 2024-10-11 21:14:39

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

Effective C++ 条款3 尽可能用const

1. const可被施加于任何作用域内的对象,函数参数,函数返回类型,成员函数本体.用const修饰指针,如果const出现在*之前,表明指针不能更改所指向的对象的内容,如果const出现在*之后,表明指针只能指向同一块内存.另外int const*p和const int*p含义相同.如果对象成员有普通指针,那么构造该类的一个const对象时,const修饰使得该指针只能指向同一块内存,但指针指向的内容可以改变. 2. 将某些东西声明为const可以帮助编译器侦测出错误用法. 3. 编译器强制实

条款21: 尽可能使用const

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

Effective C++ 条款三 尽可能使用const

参考资料:http://blog.csdn.net/bizhu12/article/details/6672723      const的常用用法小结 1.用于定义常量变量,这样这个变量在后面就不可以再被修改     const int val = 90;      val = 100;   错误 2. 保护传参时参数不被修改,如果使用引用传递参数或按地址传递参数给一个函数,在这个函数里这个参数的值若被修改, 则函数外部传进来的变量的值也发生改变,若想保护传进来的变量不被修改,可以使用const

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

如果关键字const出现在星号左边,表示被指物是常量:如果出现在星号右边,表示指针自身是常量:如果出现在星号两边,表示被指物和指针两者都是常量. char greeting[] = " hello"; char* p = greeting;  //non-const pointer,non-const data const char* p = greeting;  //non-const pointer,const data  声明p为一个指向常量的greeting的指针,p指向的对象

条款32: 尽可能地推迟变量的定义

// 此函数太早定义了变量"encrypted" string encryptPassword(const string& password) { string encrypted;//默认构造函数初始化 if (password.length() < MINIMUM_PASSWORD_LENGTH) { throw logic_error("Password is too short"); } 进行必要的操作,将口令的加密版本 放进encrypted

int *const &amp;&amp; int const * &amp;&amp; const int *的区别

ANSIC允许声明常量,常量和变量不同,常量就是不可以改变的量,用关键字const来修饰 比如:const int a int const a 以上两种声明方式是一样的,我们不需要考虑const和int的先后顺序,按照你理解的方便的一中方式进行应用. 因为const和int的顺序先后并不影响结果,因此 int const *   &&  const int *这两中情况就是一样的 所以我们只需要讨论两种情况 -----------------------------------------

C++ Primer 学习笔记_25_类与数据抽象(11)--const 用法小结、static与const以及static const(const static)

一.const 用法总结 1.可以对const 的用法做个小总结: const int n = 100;  //定义常量 const Test t(10); const int & ref = n;   //const引用 int& ref = n;  //Error [const与指针] const int* p; //const出现在*前面,表示*p是常量 (*p = 200; //Error) int * const p2;  //const出现在*后面,表示p2是常量 (p2 =

int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别

 加有const关键字的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = &num; 1.       可以读自己 2.       可以通过*p改自己 3.       可以通过p = &data来看别人 权限最大 cons int *p = &num; 1.const放在左边意味着指向的是常量,这个常量不可以修改, 2.p = &data; (地址可以修改) 3.*p = 30;(这个时候是错误的) 这两者等价(应用:查看别人的账户) i

C++中const char * const name;char * const name;cons

C++中const char * const name;char * const name;const char * name三者之间的区别? 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:HG Zhao链接:http://www.zhihu.com/question/26908463/answer/34499495来源:知乎 const *说明指向的是常量.* const说明指针是常量.const * const说明指针和指向的都是常量.