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 阅读(176) 评论(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) 编辑

摘要: 进程是一个具有一定独立功能的程序的一次运行活动。 程序是静态的代码,进程是动态的。 进程特点:动态性(相对于程序来说)、并发性(多个进程同时执行)、独立性(进程之间互不干扰)、异步性(进程执行有先后顺序) 进程状态:就绪(进程刚被创建还没有分到CPU时间片,进程时间片用完)、阻塞(IO请求未完成)、执行(就绪态经过进程调度进入执行态) 进程ID(PID)是标识进程的唯一数字。 父进程ID(PPID) 启动进程的用户的ID(UID) 进程互斥:有若干进程都要使用某一共享资源时,任何时刻最多允许一个进程使用,其他要使用该资源的进程必须等待,直到占用该资源者释放了该资源为止。 临界资源 临界区 进. 阅读全文

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

摘要: 为什么要进程通信?数据传输、资源共享、通知事件、进程控制。 IPC由一下三部分发展而来:UNIX进程间通信、基于System V进程间通信、POSIX进程间通信。 最初开发POSIX是为了提高UNIX环境下应用程序的可移植性。DEC的OpenVMS和Windows都支持POSIX。 进程通信的方式:管道和有名管道、信号、消息队列、共享内存、信号量、套接字。 管道是单向的,先进先出的,把一个进程的输出和一个进程的输入连接在一起,一个进程(写进程)在管道的尾部写入数据,另一个进程(读进程)从管道的头部读取数据。数据被一个进程读出后,将被从管道中删除。进程试图读空管道和向满的管道写数据都将阻塞。 . 阅读全文

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