本篇介绍的是C++的一些常用技巧。这些技巧看起来好像很不起眼,在实际应用当中却起着重要作用。这些技巧虽然是谈不上可以提高程序的编写效率,却可以为你去除一些不必要的麻烦和一些程序中不易被发现的隐患。 1.都是“=”惹的祸 先来看看下面两个判断表达式的写法有什么不同: // 第一种写法: if( value == 0 ) { …… } // 第二种写法: if( 0 == value ) // 推荐! { …… } value是一个变量,两个判断表达式都是判断变量value是否等于0。所不同的是,两个判断表达式的变量value和常量0的位置刚好对调了。第一个是“value == 0”,另一个是“0 == value”。 许多程序员并不知道这两种写法有什么不同,他们通常使用的写法是“value == 0”,我在这里推荐大家最好写成“0 == value”这种形式。 两个写法有什么不同吗?第二种写法是否比第一种写法更有效率?很遗憾,两种写法的效率是一样的。那么为什么我要推荐大家使用第二种写法呢?原因是在C++里判断两个值是否相等使用的运算符是两个等于号(==),没有人能百分之百地保证自己不会漏写一个等号。Tw.WinGWit.CoM使用第一种表达式的写法,如果漏写了一个等号的话就变成下面的样子: if( value = 0 ) // 严重的错误,却没有任何的错误提示和警告 {…… } 上面的判断表达式,原本的意图是想判断变量value是否等于0的,但由于漏写了一个等于号,却变成了给变量value赋值为0。我们知道,在条件判断中,如果条件表达式的值是非0的话,条件就为真,否则为假。像上面那样写法,条件判断就永远为假了(如果是非0的话就永远为真)。像这样漏写一个等号的情况,条件表达式的值要么永远为真,要么永远为假。这种判断两个值是否相等的条件表达式,程序中应该有许多,有一两处漏写了一个等号并不足为奇,可怕的是程序一般都可以正常运行,而且有许多情况并不易察觉得出来有什么异样。编译器更不会给出任何的错误提示或警告,因为这种表达式是完全合法的。 如果是换成第二种写法,而又那么不小心漏写一个等号的话,程序变成下面的样子: if( 0 = value ) // 不合法的表达式,编译器将给出错误提示 { …… } 编译程序,编译器给出以下的错误提示: error C2106: “=” : 左操作数必须为 l 值 因此,我们可以轻松地知道哪里漏写了一个等号。 |