条款03:尽肯使用const】的更多相关文章

目录 1. 总结 2. const对象 3. const函数返回值和函数参数 4. const成员函数 const成员函数的重要性 bitwise constness logical constness 5. 在const和non-const成员函数中避免重复 1. 总结 const可用于任何作用域内的对象.函数参数.函数返回值.成员函数自身,将这些内容声明为const可帮助编译器侦测出错误用法 对于const成员函数,C++编译器强制要求bitwise constness,但在编写程序时应该使…
场景一 用于修饰指针 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 = greeting; //…
关键字const多才多艺,变化多端却不高深莫测. const 修饰指针 面对指针, 你可以指出 指针自身.指针所指物.或者两者都不是 const. 如果关键字 const 出现在星号左边,表示被指物是常量. (const 出现在类型之后,星号之前 ,同上边两者意义相同) 如果出现在星号 右边,表示指针自身是常量. 如果出现在星号两边,表示被指物和指针两者都是常量. char greeting[ = "hello"; char* p = greeting; //non-const poi…
***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 一. Accustoming Yourself to C++ Rule 03: Use const whenever possible. 条款03:尽可能的使用const const就是常量,它同意你指定一个语义约束,编译器会强制实施这项约束. 多才多艺的key…
条款02: 尽量以 const, enum, inline 替换 #define 这个条款或许可以改为“宁可以编译器替换预处理器”. 编译过程: .c文件--预处理-->.i文件--编译-->.o文件--链接-->bin文件 如果你做出这样的事: #define ASPECT_PATIO 1.653 记号名称 ASPECT_PATIO 从未被编译器看见:也许在编译器开始处理源代码之前它就被预处理器移走了.于是记号名称 ASPECT_PATIO 有可能没有进入符号表(symbol tabl…
定义常量 define 是一个Compile-Time的概念,它的生命周期止于编译器期,它存在与程序的代码段,在实际程序中它只是一个常数.一个命令中的参数.并没有实际的存在 const常量存在于程序的数据段,并在堆栈分配了空间.const常量是一个Run-Time的概念,它在程序中确确实实地存在并可以被调用.传递.const常量有数据类型,而宏常量没有数据类型.编译器可以对const常量进行类型安全检查 const int val = 5; const char* const p = "hell…
如果关键字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指向的对象…
如果你对const足够了解,只需记住以下结论即可: 将某些东西声明为const可帮助编译器侦测出错误用法,const可被施加于任何作用于内的对象.函数参数.函数返回类型.成员函数本体. 编译器强制实施bitwise constness,但你编写程序时应该使用概念上的常量性(logical constness) 当const和non-const成员函数有实质等价的实现时,令non-const版本调用const版本可避免代码重复 关键字const允许你指定一个语义约束,即指定一个对象不被改动,编译器…
一.概述 使用const约束对象:可以获得编译器的帮助(指出相关出错的地方) const与成员函数:const重载.转型.避免代码重复 二.细节 1. 为什么有些函数要返回const对象(看上去没必要)? 返回const对象:a * b = c; //operator*()函数返回一个const对象,故该表达式错误 补充:我们的本意或许是a * b == c,此时返回const是没影响的,故返回const可以预防“没意思的赋值动作” 2. const成员函数不能避免对象被更改的情况 mutabl…
其实这个条款分成两部分介绍会比较好,第一部分是用const和enum替换不带参的宏,第二部分是用inline替换带参的宏. 第一部分:用const和enum替换不带参宏 宏定义#define发生在预编译期,而const,enum定义的常量发生在编译期,两者的重要差别在于编译期里的变量是进符号表的,而预编译期的宏是简单的替换,不进符号表.因此,const, enum定义的常量具有以下优势: (1)支持类型检查 (2)支持访问权限 第(1)条优势,其实在Visual Studio编译器也已经对宏也引…