分享
 
 
 

尽信书则不如无书

王朝other·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

尽信书则不如无书

尽信书则不如无书--忘了这句话的出处了,但是本猫觉得它特正确.特别是现在市面上什么书都有,良莠不齐,这句话就更显的正确.而且,就算是很多被称为经典的书籍,里面也有很多值得商榷的地方--很简单,再经典的书也是人写的,观点总是有不够全面的地方.如果对书的内容不加分析的全盘接受,不能具体情况具体分析,那就更是还不如不看这本书了.

最近市面上出了不少国外计算机经典书籍,C++编程方面的就有Effective C++, C++ Premier,C++ Programming language等等等等.这些书的作者功力深厚,内容安排与以前国内常见的书籍颇有不同,相当多的人都在研读.但是如果把他们当成圣旨,认为其中的全是金科玉律,就有点过了.

前一段项目组里新来了一个程序员.在项目进行过程中,偶然间发现他改了旧代码中的

不少内容,仔细看了一下,大概有这么几类:

1.函数声明中的int, long之类的参数都改成了constant int&,或者constant long&.

2.把相当多的int变量改成了unsigned int

3.把循环变量for(int i = 1; i < 10; i ++)这样的循环声明改成了

for(int i = 1; i < 10; == i)

本猫发现就找他谈,他引经据典的跟本猫解释:

对于第一类修改,在Effective C++中作者专门说过,要尽量用常量引用(constant ..&)来替代一般的参数声明,这样程序不容易出错.

对于第二类修改,也就是说把int变量改成unsigned int,是因为该变量是用来表示长度或者别的只有正数的状态,某本书里面这样说过,能用unsigned int的地方就坚决不用int.

至于第三类修改,在某本经典书籍里说过,i++会产生一个临时变量,这个临时变量在此处完全是浪费,用++i就不会有这种浪费,等等等等.

本猫听了一笑,按说这个程序员还是很努力,还真看了不少书,可惜有的东西并没有吃透.于是本猫跟他解释:

首先,最重要的,一个工程里面应该有纪律,不应该你修改的地方就绝对不能修改,因为旧的代码已经经过了严格的测试,已经相当稳定,如果不是发现功能上的问题,就不应该动,因为这样的修改只意味着可能带入新的bug.

其次,尽信书则不如无书,并不是书上写的就一定正确.

拿第一类修改来说,首先,在效率上,int型参数与constant int&型参数是一样的,因为

此时传值(int型)和传地址(constant int&)都是4个byte--这与大对象的传递是完全不同的;其次,按书上说,constant int&型参数声明最大的好处是,当程序员在该参数位置上错误的使用了其他类型的变量,比如说short或者long以后,编译器可以报错--但是这对我们来说并非一定是好处,很多情况下我们需要在这个参数的位置上用short型的变量,因为这样简单方便.具体的说,比如我有一个变量

short a;

如果函数声明是:

void func(int)

我可以直接使用func(a);

但是如果函数声明是:

void func(const int&) 的话,

我就要先声明一个int型的临时变量,把它设成a,然后才能调用func--显然很不方便.

至于第二类修改,说能用unsigned int的地方一定要用unsigned int, 这句话本身没有毛病,但关键是什么地方能用?经常有这样的情况:一个变量正常的时候是正数,但是需要用负值来标志特殊状态.比如说一个变量是用来表示长度的,但是当长度不确定时,就应该把它设成负值.所以,只要能保证值域正确,用int来代替unsigned int对我们只有好处.

再说第三类修改,用++i代替i++可以节省一个临时变量,这个说法当然没错,能省一点内存当然好.但是这样一条经验真的很重要?现在一台PC的标准配置是128M内存,那4个byte就那么珍贵?而且现在编译器绝对可以把那个多余的变量优化掉.你觉得这4个byte跟你付出的时间那个更珍贵些呢?

那个程序员听了后表示认同.本猫则想起了其他的例子.

比如说goto语句.几乎所有的书都说应该避免goto语句,说goto如何丑陋.但是看看一些高手写的程序,linux,或者是微软的库代码,还是可以发现goto的踪迹.实际上,在一个函数内使用goto语句进行跳转,是处理错误的常用方法,非常简便实用.有什么理由就因为那些学院派的人说它破坏"美感"就要弃之不用呢?

再比如说,有的书上说应该用C++新标准中的新的类型转换语句来替换以前的静态类型转化.但是真的有必要吗?其他的我不知道,至少本猫曾在C++ Programming Language中读到过,该书的作者并不喜欢用新的类型转换,所以他还是用老的静态类型转换来写例子.

说了这么多,还是那句话:尽信书则不如无书.对书里面的内容还是要有选择的接受.记得以前见过这样一句有趣的名言:"死书读活人,能把活人读死;活人读死书,则能把死书读活"...

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有