如何用条件运算符表示三种情况?

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)

Luc*_*ore 6

虽然这不是三元运算符的常用用法,但这是你如何做到的:

( 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的表达式.

  • 实际上,我认为你的第一个例子应该是一个或多或少标准的习惯用语.如果它的格式化方式使得显而易见的事情发生了.正如你所做的那样.我在适当的时候使用它,我想其他人会熟悉它以识别它; 一个像这样的"返回"是恕我直言,比一堆乱七八糟的`if`s,每个分支都有一个回报. (2认同)

Bjö*_*lex 6

你不能.你有什么看起来像一个用例的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的情况.]