有没有办法在不使用if语句的情况下确定变量是否小于0?
是的,这确实是一个非常奇怪的问题,但我仍然想知道。
答案 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();