您正在查看 "c/c++" 分类下的文章 2009-09-07 16:52 3.2 Item M2:尽量使用C++风格的类型转换
仔细想想地位卑贱的类型转换功能(cast),其在程序设计中的地位就象goto语句一样令人鄙视。但是它还不是无法令人忍受,因为当在某些紧要的关头,类型转换还是必需的,这时它是一个必需品。
不过C风格的类型转换并不代表所有的类型转换功能。
一来它们过于粗鲁,能允许你在任何类型之间进行转换。不过如果要进行更精确的类型转换,这会是一个优点。在这些类型转换中存在着巨大的不同,例如把一个指 向const对象的指针 |
2009-09-07 11:05 头文件不是可有可无的
作者: Dai Yuwen
我看到有些程序员用C语言写程序的时候,不太了解头文件的作用。他们对编 译器提出的警告不在乎,仅以编译、连接通过为目标,这可能会有潜在的危害。
头文件定义了数据结构和函数接口
头文件定义了数据结构,这大家都能体会到,因为不包含你要使用头文件的 话,编译根本就通不过。 头文件的另一个作用,定义函数接口,作用似乎没那 么大,因 |
2009-07-21 16:35 ◎用法: func( Type para1, Type para2, Type para3, ... ) { /****** Step 1 ******/ va_list ap; va_start( ap, para3 ); //一定要“...”之前的那个参数 /****** Step 2 ******/ //此时ap指向第一个可变参数 //调用va_arg取得里面的值 Type xx = va_arg( ap, Type ); //Type一定要相同,如: //char *p = va_arg( ap, char *); //int i = va_arg( ap, int ); |
2009-05-12 0:46 在数学运算当中经常会涉及到判断两个数是否相等的情况
对于整数很好处理 A==B这样的一个语句就可以解决全部的问题
但是对于浮点数是不同的
首先,浮点数在计算机当中的二进制表达方式就决定了大多数浮点数都是无法精确的表达的
现在的计算机大部分都是数字计算机,不是模拟机,数字机的离散化的数据表示方法自然无法精确表达大部分的数据量的。
其次计算机浮点数的精度在单精度float类型下,只有7位,在进行浮点运算的时候,这个精度往往会导致运算的结果和实际期望的结果之间有误 |
2009-02-09 14:14 分析一个源代码,一个有效的方法是:
1、阅读源代码的说明文档,比如本例中的README, 作者写的非常的详细,仔细读过之后,在阅读程序的时候往往能够从README文件中找到相应的说明,从而简化了源程序的阅读工作。
2、如果源代码有文档目录,一般为doc或者docs, 最好也在阅读源程序之前仔细阅读,因为这些文档同样起了很好的说明注释作用。
3、从makefile文件入手,分析源代码的层次结构,找出哪个是主程序,哪些是函数包。这对于快速把握程序结构有很大帮助。
4、从main函数 |
2009-01-07 13:50 你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起 。 ----- Arthur J.Riel
(1)所有数据都应该隐藏在所在的类的内部。
(2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。
(3)尽量减少类的协议中的消息。
(4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。
(5)不要把实现细节(例如 |
2008-12-25 18:54 i++和++i当然是++i更快一些
为什么这么说呢?
因为:
++i相当于下列代码
i += 1;
return i;
i++相当于下列代码
j = i;
i += 1;
return j;
-----------------
当然如果编译器会将这些差别都优化掉,使他们效率差不多:
while(++i);
对应的汇编代码(gcc 4.2.3):
while(i++);
8048355: 83 45 f8 01 |
2008-10-25 21:34 1 #include <unistd.h>
2 #include <sys/types.h>
3 #include <sys/stat.h>
4 #include <fcntl.h>
5 #include <cstdlib>
6
7 class file {
8 int fd;
9 public:
|
2008-10-24 10:16 //转贴自我的朋友云风的一篇文章,
//里面有些DarkSpy自己写的注释,希望能给不太懂这篇文章意思的朋友一些提示。
构造函数不能是虚的, 这让人很郁闷.
在 Thinking in C++ 第2版的最后作者给出了一种模拟虚构造
函数的方法, 基本是这样的.
代码:--------------------------------------------------------------------------------
// 给出一个抽象类 shape, 里面有要提供的接口
class shape {
public:
shape();
virtual ~sh |
2008-10-24 10:05 虚拟调用是一种能够在给定信息不完全(given partial information)的情况下工作的机制。特别地,虚拟允许我们调用某个函数,对于这个函数,仅仅知道它的接口,而不知道具体的对象类型。但是要建立 一个对象,你必须拥有完全的信息。特别地,你需要知道要建立的对象的具体类型。因此,对构造函数的调用不可能是虚拟的。
当要求建立一个对象时,一种间接的技术常常被当作“虚拟构造函数”来使用。有关例子,请参见《C++程序设计语言》第三版15.6.2.节。
下面这个例子展示一种机制:如 |
| | |