如果没有if语句,确定变量是否小于0

时间:2014-11-23 15:43:27

标签: c++

有没有办法在不使用if语句的情况下确定变量是否小于0?

是的,这确实是一个非常奇怪的问题,但我仍然想知道。

1 个答案:

答案 0 :(得分:9)

似乎存在一个根本性的误解。

if本身不进行任何比较;它只是根据布尔表达式的值运行一个分支或另一个分支,例如, x<0。现在,由于C ++富含其他条件结构并且可以使用布尔表达式作为索引,因此您总是可以在很多方面利用实际进行比较的表达式:

switch(x<0)
{
    case true:
        std::cout<<"x < 0\n";
        break;
    default:
        std::cout<<"x >= 0\n";
}

std::cout<<(x<0?"x < 0":"x >= 0")<<"\n";

const char *sign[]={">=", "<"};
std::cout<<"x "<<sign[x<0]<<" 0\n";

x<0 && puts("x<0");
x<0 || puts("x>=0");

while(x<0)
{
    std::cout<<"x<0\n";
    break;
}
while(!(x<0))
{
    std::cout<<"x>=0\n";
    break;
}

/* ... */

void l() { puts("x<0");}
void g() { puts("x>=0");}

/* ... */

void (*fns[])={g, l};
fns[x<0]();

/* ... */
struct B {
    virtual void doIt()=0;
}

struct D1 : B {
    void doIt() { std::cout<<"x<0\n"; }
}

struct D2 : B {
    void doIt() { std::cout<<"x>=0\n"; }
}

D2 d2; D1 d1;
B *arr[] = {&d2, &d1};
arr[x<0]->doIt();