2011年11月30日

摘要: 在C++代码的很多上下文(比如构造函数的成员初始化列表,或抛出异常的throw表达式),除了表达式别无选择。case语句的标签必须是整型常量性的表达式,或者是有能够转换成整型的其它类型也可以。 阅读全文

posted @ 2011-11-30 09:12 SomethingReview 阅读(104) 评论(0) 推荐(0) 编辑

2011年11月28日

摘要: int ci = 123; const int *ip2 = &ci; ci = 345; // 没问题 *ip2 = 788; // 错误 阅读全文

posted @ 2011-11-28 22:20 SomethingReview 阅读(149) 评论(0) 推荐(0) 编辑

摘要: 能对引用做的唯一操作是将其初始化。一旦初始化结束,引用就是其初始化物的另一种写法罢了。由于引用没有地址,声明引用的引用、指向引用的指针或引用的数组都是不合法的。引用不可能带有常量性和挥发性,不能用关键字const和volatile来修饰引用。没有空引用,也没有类型为void的引用。如果函数的返回值具有引用类型,这就意味着可以对该函数的返回值重新赋值。一个经常被津津乐道的典型例子就是表示数组之抽象数据类型的索引函数。引用的另一个用途就是可以让函数在其返回值之外多传几个值。 阅读全文

posted @ 2011-11-28 22:08 SomethingReview 阅读(173) 评论(0) 推荐(0) 编辑

摘要: 函数重载和形式参数默认值之间其实并无干系,不过这两个独立的语言特征有时会被混淆,因为它们会构建出语法上非常相像的函数用法接口。函数重载主要用于一组抽象意义相同,但实现不同的函数。而形式参数默认值主要用于简化,为函数提供更简洁的接口。 阅读全文

posted @ 2011-11-28 21:43 SomethingReview 阅读(158) 评论(0) 推荐(0) 编辑

摘要: 全局变量增加了模块之间的耦合,因为它们常常作为幼稚的模块间消息传递机制的设施存在。仅仅是把对于值的访问加上了函数形式的包装,我们就获得了可贵的可扩充性。要是再加上函数重载或者给予函数形式参数以默认值,我们就根本不需要怎么改源代码了。全局变量经常要求延迟到运行期才进行静态初始化。在C++语言中,如果静态变量用来初始化的值不能在编译时就计算妥当,那么这个初始化的动作就会被拖到运行期。如果该用函数或者class来充当访问全局信息的掮客,初始化动作就会被延后,从而变得安全无误了。 阅读全文

posted @ 2011-11-28 21:36 SomethingReview 阅读(178) 评论(0) 推荐(0) 编辑

摘要: 幻数带来的问题是它们没有抽象语义。在其所在作用域有着明确含义的枚举常量,有着不占空间,也没有任何运行期成本的巨大优点。字面常量的实际类型是平台相关的。幻数会以意想不到的方式降低它所代表类型的精度。字面常量没有地址。请使用枚举常量或初始化了的具名常量。 阅读全文

posted @ 2011-11-28 21:15 SomethingReview 阅读(164) 评论(0) 推荐(0) 编辑

摘要: 最有效率的代码是根本不存在的代码,最好就是要注释的代码自注释。不应该把更改日志作为注释插入到源文件的头部或者尾部。代码增加一页,理解难度就大了一倍。注释要随着它描述的代码的更改而更改。遵循简单易行、定义良好的命名习惯,函数声明中形式参数的名字尤其重要。采用标注库中的、人尽皆知的组件。注释不应该描述显而易见的东西,或把在别的地方已经说清楚的东西再说一遍。在代码容易理解和维护的前提下尽可能少写注释。 阅读全文

posted @ 2011-11-28 20:56 SomethingReview 阅读(189) 评论(0) 推荐(0) 编辑

2011年11月27日

摘要: 1. 子list是拷贝,不是引用。改变得到的字符串不会改变原来的字符串2. [k+1 for k in a if type(k) == types.IntType]3. s = """abc def""" print s输出abc def注意换行和空格4. a = [1, 1, 2] a.remove(1)只会去掉第一个15. "ok abc".rfind("abc") #3 反向查找,索引还是按照正顺序的索引6. find和index都能返回索引,但是index找不到的时候抛出异常,处理方式太 阅读全文

posted @ 2011-11-27 14:14 SomethingReview 阅读(109) 评论(0) 推荐(0) 编辑

摘要: linux文件编程可以使用两种方法: linux系统调用,依赖于linux操作系统 int create(const char* filename, mode_t mode) 所有打开的文件都对应一个文件描述符(非负整数,由系统分配),范围是0 - OPEN_MAX。 int open(const char* pathname, int flags) int open(const char* pathname, int flags, mode_t mode) int close(int fd) int read(int fd, const void* buf, size_t length).. 阅读全文

posted @ 2011-11-27 10:53 SomethingReview 阅读(190) 评论(0) 推荐(0) 编辑

摘要: 多线程的好处: 线程是一种非常“节俭”的多任务操作方式。在linux系统下,启动一个新的进程必须分配给它独立的地址空间,建立众多的数据表来 维护它的代码段、数据段和堆栈段,这是一种“昂贵”的多任务工作方式。 线程间方便通信。对不同进程来说,它们具有独立的数据空间,要进行数据的传递只能通过进程间通信的方式进行,这种方式不仅费时 ,而且很不方便。由于同一进程下的线程之间共享数据空间,一个线程的数据可以直接为其它线程所用,这不仅快捷,而且方便。 多线程使多CPU系统更加有效。操作系统会保证当线程数不大于CPU数目时,不同的线程运行于不同的CPU上。 改善程序结构。一个既长又复杂的进程可以考虑分为多个 阅读全文

posted @ 2011-11-27 10:53 SomethingReview 阅读(133) 评论(0) 推荐(0) 编辑