二级考试C++辅导-C++程序设计实践.pdf
《二级考试C++辅导-C++程序设计实践.pdf》由会员分享,可在线阅读,更多相关《二级考试C++辅导-C++程序设计实践.pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、二级考试二级考试 C+C+辅导辅导:C+:C+程序设计实践程序设计实践1、Prefer const and inline to #define在 C+编程中应当尽量使用 const 和 inline 来代替#define,尽量做到能不用#define 就不用。#define 常见的用途有“定义常量”以及“定义宏” ,但其中存在诸多的弊病。第一,查错不直观,不利于调试。Define 的定义是由预处理程序处理的, 作的是完全的文本替换, 不做任何的类型检查。 在编译器处理阶段,define 定义的东西已经被完全替换了,这样在 debug 的时候就看不到任何的相关信息,即跟踪时不能 step int
2、o 宏。例如,把 ASPECT_RATIO 用define 定义成 1.653,编译器就看不到 ASPECT_RATIO 这个名字了。假如编译器报 1.653 错, 那么就无从知道此 1.653 来自于何处。 在真正编码的时候应当使用如下的语句来定义:static const double ASPECT_RATIO = 1.653;其次,没有任何类型信息,不是 type safe。由于它是文本级别的替换,这样不利于程序的维护。第三,define 的使用很简单造成污染。比方,假如有两个头文件都定义了 ASPECT_RATIO, 而一个 CPP 文件又同时包含了这两个头文件,那么就会造成冲突。更难
3、查的是另外一种错误,比方有如下的代码:/ in header file def.h#define Apple 1#define Orange 2#define Pineapple 3/ in some cpp file that includes the def.henum Colors White, Black, Purple, Orange;在.h 文件中 Orange 被定义成水果的一种,而在.cpp 文件中 Orange又成为了一种颜色,那么编译器就会把此处的 Orange 替换成 2,编译可能仍旧可以通过,程序也能够运行,但是这就成了一个bug,表现出奇怪的错误, 且很难查错。 再比
4、方定义了一个求 a 与 b 哪个数大的宏, #definemax(a,b) (a) (b) ? (a) : (b)int a = 5, b = 0;max(+ a, b);max(+ a, b + 10);在上面的操作中, max(+ a, b); 语句中 a 被+了两次, 而 max(+ a,b + 10); 语句中 a 只加了一次,这样在程序处理中就很有可能成为一个bug,且此 bug 也特别的难找。在实际编码时可以使用如下的语句来做:templateinline const T 2、Prefer C+-style casts在程序中常常会需要把一种类型转换成另外一种类型, 在 C+中应当
5、使用 static_cast、const_cast、dynamic_cast、reinterpret_cast 关键字来做类型转换。由于这有以下好处,一是其本身就是一种解释,在代码中看到上面这些关键字就可立刻知道此处是进展类型转换。 二是 C 语言中类型转换通常是很难进展搜寻的,而通过关键字 cast 则可以很简单的找到程序中消失类型转换的地方了。3、Distinguish between prefix and postfix forms of incrementand decrement operators通常对于操作系统或编译器自身支持的类型, prefix (前缀, 如+i)与 post
6、fix(后缀,如 i+)的效果是一样的。由于现在的编译器都很聪慧,它会自动做优化,这两者的汇编代码是一样的,性能不会有差异。但有时候也会有不同的,如一些重载了操作符的类型。下面是模拟 prefix与postfix的操作过程, 可以发觉在postfix操作中会生成一个临时变量,而这一临时变量是会占用额外的时间和开销的。/ prefix form: increment and fetchUPInt / incrementreturn *this; / fetch/ postfix form: fetch and incrementconst UPInt UPInt:operator+(int)UP
7、Int oldValue = *this; / fetch+(*this); / incrementreturn oldValue; / return what was fetched一般状况下不需要区分是先+, 还是后+, 但是我们在编写程序的时候能习惯性的将其写成+i 的形式,如在使用 STL 中的 iterator 时,prefix 与 postfix 会有相当大的性能差异。请不要小看这些细节,实际在编写程序的时候, 若不留意详细细节, 你会发觉程序的性能会特别的低。但要留意,虽然在大多数状况下可以用 prefix 来代替 postfix,但有一种状况例外,那就是有操作符时,比方 gzA
8、rray +index 是不等于gzArrayindex+的。4、Minimizing Compile-time Dependencies有些人在编写程序时, 往往喜爱将一个.h 文件包含到另一个.h 文件,而实践证明在做大型软件时这是一个特别不好的习惯, 因这样会造成许多依靠的问题,包含较多的.h 文件,别人又使用了这个 class,而在他的那个工程中可能并不存在这些.h 文件,这样很可能就编译不能通过。而且这样做,还可能造成很难去更新一个模块的状况。由于一个.h 文件被许多模块包含的话,假如修改了此.h 文件,在编译系统的时候,编译器会去查找哪些模块依靠于某个被修改正的.h 文件,那么就导
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 考试 C+ 辅导 程序设计 实践
限制150内