随笔分类 -  读书笔记

编程痛并快乐着
摘要:《人月神话》中提到编程这个职业时,列出编程给人带来乐趣的理由,同时也谈到这个职业也给人很多苦恼,下面是这篇文章的观点,觉得写的不错:快乐:编程的乐趣是一种创建事物的纯粹快乐。快乐来自于开发对其他人有用的东西。编程的过程体现了魔术般的力量。学习新事物的乐趣,源于工作的非重复特性。还来自于工作在如此易于驾驭的介质上。总之,编程非常有趣,在于它不仅满足了我们内心深处进行创造的渴望,而且还愉悦了每个人内在的情感。痛苦:必须追求完美。由其他人来设定目标,供给资源,提供信息。寻找琐碎的BUG却是重复性的工作。当投入了大量辛苦的劳动,产品在即将完成或者终于完成的时候,却已显得陈旧过时。我的体会:每当我仅仅用 阅读全文

posted @ 2012-04-26 20:54 hazir 阅读(1838) 评论(5) 推荐(2) 编辑

20. 协助完成“返回值优化(RVO)”
摘要:[19]最后曾提到了在函数通过传值方式(by value)返回一个对象时,不可避免地要生成一个临时对象,这会严重影响到程序的效率,如下例计算两个分式的乘积:class CRational{public: CRational(int numerator, int denominator) { this->numerator = numerator; this->denominator = denominator; } int numer() const //get numerator { return nume... 阅读全文

posted @ 2012-04-19 11:50 hazir 阅读(1852) 评论(0) 推荐(1) 编辑

19. 了解临时对象的来源
摘要:什么是临时对象? C++真正的临时对象是不可见的匿名对象,不会出现在你的源码中,但是程序在运行时确实生成了这样的对象.通常出现在以下两种情况:(1)为了使函数调用成功而进行隐式类型转换的时候。 传递某对象给一个函数,而其类型与函数的形参类型不同时,如果可以通过隐式转化的话可以使函数调用成功,那么此时会通过构造函数生成一个临时对象,当函数返回时临时对象即自动销毁。如下例://计算字符ch在字符串str中出现的次数int countChar (const string& str, char ch);char buffer[];char c;//调用上面的函数countChar (buffe 阅读全文

posted @ 2012-04-18 23:09 hazir 阅读(3306) 评论(2) 推荐(1) 编辑

7. 千万不要重载&& ,|| 和,操作符
摘要:C/C++语言对于逻辑表达式具有“逻辑短路”的性质,即一旦确定了真假值,表达式中即使有尚未检查的部分,都将返回。如:char *p;if ((p != NULL) && printf("%c", *p)) ... //(1) int rangeCheck(int index){ if ((index < lowerBound) || (index > upperBound)) ... //(2) ...}(1)中你不用担心p为NULL时,调用printf函数会出现错误,因为一旦p为NULL逻辑与的检测将返回FASLE,无需计算后面... 阅读全文

posted @ 2012-04-16 17:38 hazir 阅读(2064) 评论(1) 推荐(1) 编辑

6. 区别increment/decrement操作符的前置(prefix)和后置(postfix)形式
摘要:C++中允许++ 和-- 操作符的前置和后置两种形式具有重载的能力。而重载是以参数类型来区分的,然而不论是++ 还是 -- 的前置或后置均没有参数,为了区分这两种不同的操作,只好让后置式有一个int自变量,并且在它调用的时候,编译器默认给该int指定一个0值。下面的例子是使char型也能进行++ 和 -- 的运算:class Char{public: Char(char); Char& operator++ (); //前置式++ const Char operator++ (int); //后置式++ Char& ope... 阅读全文

posted @ 2012-04-16 16:27 hazir 阅读(3129) 评论(4) 推荐(2) 编辑

8. 了解各种不同意义的new 和 delete
摘要:C++中关于new 的形态主要有三种:new operator, operator new, placement new三者的用法有着不同,注意区别适用的条件:new operator:new 操作符,和C++语言其它操作符(如+, -, ->, ::....)一样,是由语言内建的,总是完成相同的事情,程序员不能改变其意义。如下为new的一种用法:string *ps = new string("hazirguo");它主要完成的任务包括三个方面:分配足够的内存,用来放置某类型对象。上例中分配足够放置一个string对象的内存。调用一个constructor,为分配的 阅读全文

posted @ 2012-04-15 14:15 hazir 阅读(473) 评论(0) 推荐(2) 编辑

2. 最好使用C++转型操作符
摘要:旧式的C转型方式,几乎允许你将任何类型转换为任何其它类型,有其自身的缺陷,表现在以下两方面:不能更精确地指明其转型的意图。如将一个pointer-to-base-class-object 转型为一个pointer-to-derived-class-object(改变一个对象的类型)和将一个pointer-to-const-object转型为一个pointer-to-non-const-object(改变对象的常量性),在旧式C语法中并不区分。难以辨识。旧式C转型方式的语法为(type)expression,由一对小括号加上一个对象名称组成,而这种语法结构在C++的任何地方都有可能使用,这就无法 阅读全文

posted @ 2012-04-14 17:58 hazir 阅读(1342) 评论(1) 推荐(2) 编辑

1.仔细区别pointers 和 references
摘要:没有所谓的null reference: 若有一个变量有可能代表一个对象,也可能不代表任何对象,应该使用pointer; 如果这个变量必须代表一个对象,即不允许这个变量为null,则应该使用reference。 因此,reference必须要有初始化,但pointer就没有此限制(不过,无初始化的pointer风险很高)。string &rs; // error! not initialstring s("hazirguo");string &rs = s; // right! rs refere to spointers可以被重新赋值指向另一个对象,ref 阅读全文

posted @ 2012-04-14 16:42 hazir 阅读(459) 评论(0) 推荐(0) 编辑

回溯算法之 N皇后问题
摘要:// n皇后 #include <stdio.h> #include <string.h> #define MAX 15 int n; //n queen int cur; //cur row int A[MAX]; //the ith row's queen put in the A[i]th column int tot = 0; // total nums //cur 为当前遍历到的行。 //从第1~n列中选择一列,使当前皇后放到此位置时,与已经放好的1~cur-1行的皇后不冲突(即不在同一行、同一列、两个对角线上) void search(int cur 阅读全文

posted @ 2012-03-28 20:42 hazir 阅读(290) 评论(0) 推荐(0) 编辑

一个代码可以创造一个世界,也可以毁灭一个世界!

点击右上角即可分享
微信分享提示