本书不愧为经典书,在if这地方能避免说教,讲得绘声绘色,真叫人佩服。
大体上if要注意的就只有else的配对问题了。如果在else前方有多个没有配对的if,那就找最近的一个配对。如果要改变这种默认的“拉郎配”,就加上花括号。
还是引用林锐博士的一句话吧:“if、for、while、do等……不论执行语句有多少都要加{}。这样可以防止书写失误。”(《高质量C++/C编程指南》第16页)
if语句曾有一个令我疑惑了好久的东西:“else if”究竟算什么?因为BASIC里有“ElseIf”这个关键词,而C++中所谓的“else if”是两个关健词组成的。中间插了个空格。我们都知道,C++的语句与语句之间插入若干个(包括0个)空格、TAB、回车都是一样的,那么,如果我把else后插入一个回车,不成了另一种结构的if语句了么?后来我仔细地分析一下逻辑关系,才豁然开朗:原来是BASIC的“ElseIf”干扰了我的理解。C++中用哪种方法去理解都没区别。
都说switch是为了简化if而出现的,但是switch虽然可以简化if,却并不是任何时候都能使用。使用switch有两个先决因素:一是所有的条件都必须是编译时常量。也就是说如果要在程序运行时再决定case后的条件,那是不行的。另一个因素是只能拿出若干个整数值来比较是否相等,既不能是浮点数,也不能比较大于或小于。
switch最容易出错的就是丢失break语句了。因为按常规思路,人们总以为两个标号之间的语句才是应该执行的。从BASIC过来的人更加痛苦,因为BASIC里不需要类似于break这样的语句来表示结束。
我的做法是,在打程序框架时,先把case标号和break写了,其余的再去完善。即使逻辑上不需要break语句,也要写上“//break;”,这样可以提醒自己和团队的伙伴:此处并未丢失break,而是的确不需要。
丢失default是最理直气壮的了。因为的确有许多时候并不需要default,但是我的经验是要加上default以及它后面的break,原因同上,提醒自己和伙伴我没有遗漏。
本站文章皆为作者原创,其它媒体(包括但不限于报刊、杂志、网站、电视、电台)未经作者书面许可严禁转载(或部分摘录)!
