当前位置:编程学习 > C/C++ >>

用&&和||代替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++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,