用const定义的常量含有数据类型,该常量可以参与逻辑运算。例如:
constint LENGTH = 100;// LENGTH是int类型
constfloatMAX=100;// MAX是float类型
#defineLENGTH 100// LENGTH 无类型
#defineMAX 100// MAX 无类型
除了能定义常量外,const还有两个“保护”功能:
一、强制保护函数的参数值不发生变化
以下程序中,函数f不会改变输入参数name的值,但是函数g和h都有可能改变name的值。
void f(String s);// pass by value
void g(String &s);// pass by referance
void h(String *s);// pass by pointer
main()
{
String name=“Dog”;
f(name);// name的值不会改变
g(name);// name的值可能改变
h(name);// name的值可能改变
}
对于一个函数而言,如果其‘&’或‘*’类型的参数只作输入用,不作输出用,那么应当在该参数前加上const,以确保函数的代码不会改变该参数的值(如果改变了该参数的值,编译器会出现错误警告)。因此上述程序中的函数g和h应该定义成:
void g(const String &s);
void h(const String *s);
二、强制保护类的成员函数不改变任何数据成员的值
以下程序中,类stack的成员函数Count仅用于计数,为了确保Count不改变类中的任何数据成员的值,应将函数Count定义成const类型。
class Stack
{
public:
void push(int elem);
void pop(void);
intCount(void) const;// const类型的函数
private:
intnum;
intdata[100];
};
int Stack::Count(void) const
{
++ num;// 编译错误,num值发生变化
pop();// 编译错误,pop将改变成员变量的值
return num;
}
6.2.5 其它建议
(1)不要编写一条过分复杂的语句,紧凑的C++/C代码并不见到能得到高效率的机器代码,却会降低程序的可理解性,程序出错误的几率也会提高。
(2)不要编写集多种功能于一身的函数,在函数的返回值中,不要将正常值和错误标志混在一起。
(3)不要将BOOL值TRUE和FALSE对应于1和0进行编程。大多数编程语言将FALSE定义为0,任何非0值都是TRUE。Visual C++将TRUE定义为1,而Visual Basic则将TRUE定义为-1。示例程序如下:
BOOLflag;
…
if(flag){ // do something }// 正确的用法
if(flag==TRUE){ // do something }// 危险的用法
if(flag==1){ // do something }// 危险的用法
if(!flag){ // do something }// 正确的用法
if(flag==FALSE) { // do something }// 不合理的用法
if(flag==0){ // do something }// 不合理的用法
(4)小心不要将“= =”写成“=”,编译器不会自动发现这种错误。
(5)不要将123写成0123,后者是八进制的数值。
(6)将自己经常犯的编程错误记录下来,制成表格贴在计算机旁边。
6.3 小 结
C++/C程序设计如同少林寺的武功一样博大精深,我练了8年,大概只学到二三成。所以无论什么时候,都不要觉得自己的编程水平天下第一,看到别人好的技术和风格,要虚心学习。
本章的内容少得可怜,就象口渴时只给你一颗杨梅吃,你一定不过瘾。我借花献佛,推荐一本好书:Marshall P. Cline著的《C++ FAQs》[Cline 1995]。你看了后一定会赞不绝口。
会编写C++/C程序,不要因此得意洋洋,这只是程序员基本的技能要求而已。如果把系统分析和系统设计比作“战略决策”,那么编程充其量只是“战术”。如果指挥官是个大笨蛋,士兵再勇敢也会吃败仗。所以我们程序员不要只把眼光盯在程序上,要让自己博学多才。我们应该向北京胡同里的小孩们学习,他们小小年纪就能指点江山,评论世界大事。
第七章 测试与改错
编程大师说:“任何一个程序,无论它多么小,总存在着错误。”
初学者不相信大师的话,他问:“如果一个程序小得只执行一个简单的功能,那会怎样?”
“这样的一个程序没有意义,”大师说,“但如果这样的程序存在的话,操作系统最后将失效,产生一个错误。”
但初学者不满足,他问:“如果操作系统不失效,那么会怎样?”
“没有不失效的操作系统,”大师说,“但如果这样的操作系统存在的话,硬件最后将失效,产生一个错误。”
初学者仍不满足,再问:“如果硬件不失效,那么会怎样?”
大师长叹一声道:“没有不失效的硬件。但如果这样的硬件存在的话,用户就会想让那个程序做一件不同的事,这件事也是一个错误。”
没有错误的程序世间难求。[James 1999]
错误是一种严重的程序缺陷。测试的目的是为了发现尽可能多的缺陷,并期望通过改错来把缺陷统统消灭,以期提高软件的质量。但关于测试与改错实在没有什么高明的方法值得大书特书,也不能表现出程序员的聪明才智。相反地,它们带来了更多的牢骚与痛苦。因此在教学和开发实践中,测试与改错总是被当作万般无奈的工作踢到角落里。
医生可以把他的错误埋葬在地下了事,但程序员不能。我们必须要学会测试与改错,并且把测试与改错工作做好。
7.1 对测试的理解
测试的道理并不深奥,计算机专业人员都应该明白。但就是这么简单的事,计算机专业的博士们也未必都已经理解。
有一天,一位比我聪明,编程比我快,学习能力比我强的计算机专业博士生恭恭敬敬地请我坐好,并且史无前例地削了苹果请我吃,为的是向我请教“软件工程”问题。你必定以为这位仁兄好学之极。非也,我和他同事三年来从未探讨过“软件工程”问题。只因为他明天要去应聘,参加面试,生怕被人问倒,就央我当晚为他恶补一把“软件工程”。他还特地问我“什么是白盒测试和黑盒测试?应该由谁来执行?”(有公司曾经这样面试应聘者)当我解释完测试的道理时,他叹了一口气说:“这些玩意儿我读大学十年来都没搞过,怎么能讲得出道理来。唉,就去碰碰运气吧。”我有“兔死狐悲”的感觉。我们这一群博士生三年来尽干些自欺欺人的事,到毕业时学问既不深也不博。个个意志消沉,老气横秋。长此以往,总有一天招聘会的大门前将贴出标语“博士与狗不得入内”。
以下是关于测试的几个重要观念。
7.1.1 测试的目的
测试的目的是为了发现尽可能多的缺陷。
这里缺陷是一种泛称,它可以指功能的错误,也可以指性能低下,易用性差等等。测试总是先假设程序中存在缺陷,再通过执行程序来发现并最终改正缺陷。理解测试的目的是个很重要的意识问题。如果说测试的目的是为了说明程序中没有缺陷,那么测试人员就会向这个目标靠拢,因而下意识地选用一些不易暴露错误的测试示例。这样的测试是虚假的。
目前高校的科技成果鉴定会普遍存在类似的虚假现象。我在读硕士时就亲身经历过这样的事。我们的项目是研究集成电路制造过程中的成品率问题。当时国内大多数工厂的集成电路成品率只有百分之几,我编写的示例程序可以将集成电路的成品率优化到98%。示例效果是如此的好,以致一位评委(某厂的总工程师)不无讽刺地说:“采用你们的成果,我们可要发大财了。”这个项目就轻易地通过了鉴定,并且不久后获得了电子工业部科技进步二等奖。这就象在考试时通过作弊取得了好成绩而被表扬。我那时尚且纯真,羞愧之余,不禁对高校科研成果的水平和真实性大失所望(现在我已不再失望,因为很少抱希望)。
一个成功的测试示例在于发现了至今尚未发现的缺陷。
小说推荐
- 软软入相思
- 都城白府,突然多出来了一位大小姐白木雨 众人好奇,却意外发现这被白家宝贝的女儿,脑子好像不大正常 一场宴会,众人得见盛装的白小姐 神祀下诏,白氏女,无根人 真龙之人得之,如虎添翼。旁人得之,不得善终>所以,是福?还是祸 半夜,白小姐的闺房里突然闯进来了个登徒子 自称对白小姐一见钟情,并决定要一缠二闹
- 都市言情言凝倪连载中
- 最新章:(两百三十五)我守着你
- 程心程意
- 从小老师就教育我们叔中自有黄金屋,叔中自有颜如玉。程锦之最大的愿望就是能嫁给隔壁老程直到有一天—程牧白:锦之,跟我回家。程锦之:那你不许勾搭别的女人!程牧白:除了你,我有过别人?从此双程合璧想想还有点小激动呢o 作者:所写的《程心程意》无弹窗免费全文阅读为转载作品,章节由网友发布
- 都市言情未知完本
- 最新章:第46章
- 程少的心尖小软糖
- 尹茜一直知道自己的婚姻不幸福,爹不疼娘不爱,丈夫更是不爱自己,在这场婚姻中,她也只不过是两个集团的交易品而已,可是让她没想到的是,亲手葬送她婚姻的竟然是她最好的闺蜜 而她一次次的忍气吞声,换来的却是丈夫当着她的面跟自己的闺蜜上演“动作戏。撕心裂肺后的她决定“我卖艺不卖身”尹茜的话让程天泽不退反进“卖
- 都市言情牛油果酥酥连载中
- 最新章:第1194章 大结局
- 在moto手机上使用的txt阅读软件
- 在moto手机上使用的txt阅读软件支持机型为:MOTOROLA系列:V3V300-V600(i)V360C501L7L6E398E375E680C650C381v635E1E2E680E680IA780A1200C975C980E1000E770V3IV3X诺基亚系列:32505140i60606
- 未知连载中
- 最新章:第1章
- TXT电子书批量转换中文Unicode编码的软件
- 经常看TXT电子书,但网上下载的经常不是Unicode编码的,打开后会出现乱码,要在电脑上转换,有了这个工具,可以批量转换了,不用一个个另存为Unicode编码了 作者:所写的《TXT电子书批量转换中文Unicode编码的软件》无弹窗免费全文阅读为转载作品,章节由网友发布
- 未知连载中
- 超级软件
- 众所周知,电脑只有装了软件,才会有各种功能,办公、上网、游戏、影音娱乐等等;如果人的大脑也能够安装软件,安装计算器,就能心算;千千静听,就能够歌唱;QQ、浏览器、暴风影音、WOW…一个平凡的少年,要做养家的爷们;一只手机从天而降,大脑安装软件,人生从此不同 作者:钓鱼所写的《超级软件》无弹窗免费全文
- 都市言情钓鱼完本
- 最新章:第四百零八章 向前看(全书完)
- 修仙软件
- 《修仙软件》作者:稀凤【完结】在无名之辈之中惊艳而出,在修仙世界里嚣张跋扈。一代修仙者的豪言!萧泽尧携带自己编程的修仙软件,闯入异界,开始修仙。这里有有被千年诅咒的情侣,生生世世轮回。神魔两道的第一次合作,以及,泉眼浩劫的镇压。萧泽尧的穿越,将改变整个修真史的历史。修仙成神的是惊艳之辈,超凡入圣的是
- 武侠小说未知连载中
- 最新章:第117章
- 人形软件
- 《人形软件》作者:谭剑【完结“我不写科幻本身,我写科幻世界中的真实人性”华语科幻星云奖,最佳长篇小说与最佳作家银奖,科幻小说的后科技之作。本书采用了畅销小说的写法,情节性颇强,时时引着读者读下去,其中对未来网路及灵魂上载的描写亦别开生面。它不仅展现了我们的替身在网路世界的传奇冒险,展现了虚拟生命对真
- 科幻小说未知连载中
- 最新章:第31章
- 我是杀毒软件
- 我游走在黑暗与光明之间,杀戮是我的挚友,邪恶是我的仆从,白骨累累化作我的权杖,鲜血殷殷染红我的披风,阴冷双翼所过之处,死亡的哭号必将震天动地 我是死神。同时也是一个杀毒软件。作者自定义标签:冷酷 作者:懒鸟所写的《我是杀毒软件》无弹窗免费全文阅读为转载作品,章节由网友发布
- 玄幻小说懒鸟连载中
- 最新章:没有后记的后记