用&&和||代替if..else..
在C++中,像这样的表达式:expression1 && expression2
如果expression1的值为零时,整个&&表达式就会结束,也就是说不会再去计算expression2了。
&&表达式的这种计算策略,叫作短路求值(More Effective C++中叫作“骤死式”)。
其实,如果我们利用这个特性,就可以用&&和||来代替if..else..。
if..else版本:
if (expression1)
{
expression2;
}
else
{
expression3;
}
&&和||版本:
expression1 && (expression2 || 1) || expression3;
?:版本:
expression1 ? expression2 : expression3;
以上三个版本中,?:版本最具有局限性。比如下面这段代码:
#include <iostream>
int main ()
{
int a;
if (1)
std::cout << "1";
else
a = 0;
return 0;
}
如果换成?:版本的,就会出错:
int main ()
{
int a;
1 ? (std::cout << "1") : (a = 0); //编译出错
return 0;
}
出错原因是因为语法规定?:中:两边的值的类型要一致。所以说,这就是?:的局限性。
但如果换成&&和||,却并没有这种局限:
#include <iostream>
int main ()
{
int a;
1 && ((std::cout << "1") || 1) || (a = 0); //编译通过
return 0;
}
这是因为&&和||只需要判断表达式的值是否为零,所以不存在类型的问题。
呵呵,以上的代码比较有趣。不过在实际工程中,没有人会使用这种晦涩难懂的代码。对于&&和||的这种计算策略,大概知道一下就可以了。
摘自 kof2001kop
补充:软件开发 , C++ ,