joh*_*ohn 0 c c++ conditional-operator
是否可以使用条件运算符表达案例?例如 :
if(rval==1)
DO THIS 1;
else if(rval==2)
DO THIS 2;
else if (rval ==3)
DO THIS 3;
Run Code Online (Sandbox Code Playgroud)
虽然这不是三元运算符的常用用法,但这是你如何做到的:
( rval == 1 ) ? (expression1) :
( rval == 2 ) ? (expression2) :
( rval == 3 ) ? (expression3) : (default);
Run Code Online (Sandbox Code Playgroud)
但是,为了代码可读性,我建议你坚持使用这些if语句.
或者更好的是,这似乎switch更合适.
编辑:
这是我用于测试的代码:
void foo() {};
void goo() {}
int main()
{
int x = 0;
x == 0 ? foo() : x == 1 ? goo() : foo();
}
Run Code Online (Sandbox Code Playgroud)
EDIT2:
对于所有nay-sayers - 参见section 5.16- 第二和第三个操作数是表达式; section 5.16.2处理类型为void的表达式.
你不能.你有什么看起来像一个用例的switch陈述:
switch(rval) {
case -1: DO THIS 1; break;
case 2: DO THIS 2; break;
case 3: DO THIS 3; break;
default: ERROR;
}
Run Code Online (Sandbox Code Playgroud)
编辑我在这里过分渴望.正如@Luchian Grigore在评论中指出的那样,你可以做到这一点(正如他在答案中所表明的那样).请注意,对于其中一个或两个表达式属于类型的情况,也可以很好地定义void,如§5.16/ 2 [expr.cond]中所述:
如果第二个或第三个操作数具有类型(可能是cv-qualified)void,则左值到右值(4.1),数组到指针(4.2)和函数到指针(4.3)标准转换是在第二和第三个操作数上执行,以下之一应持有:
- 第二个或第三个操作数(但不是两个)是一个throw-expression(15.1); 结果是另一个的类型,是一个右值.
- 第二个和第三个操作数都有类型void; 结果是void类型,是一个rvalue.
[注意:这包括两个操作数都是throw-expressions的情况.]