条件运算符:灵活性多少?

时间:2013-04-24 12:00:51

标签: c++ conditional-operator

我想执行以下操作:

if(x == true)
{
    // do this on behalf of x
    // do this on behalf of x
    // do this on behalf of x
}

使用条件运算符,这是正确的吗?

x == true ? { /*do a*/, /*do b*/, /*do c*/ } : y == true ? ... ;

这是不正确的?

我没有使用条件运算符嵌套多个级别。

我打算使用的表达式非常简洁和简单,在我看来,值得使用条件运算符。

P.S。我不是问A.我应该使用哪种? B.哪个更好C.哪个更合适

P.S。我问如何将if-else语句转换为三元条件运算符。

关于编码标准等问题的任何建议都是不受欢迎的。

3 个答案:

答案 0 :(得分:3)

不要将布尔值与真假相比较。没有意义,因为它们已经是真或假!只需写下

if (x)
{
    // do this on behalf of x
    // do this on behalf of x
    // do this on behalf of x
}

您的第二个示例无法编译,因为您使用{}。但这可能

x ? ( /*do a*/, /*do b*/, /*do c*/ ) : y ? ... ;

但它确实取决于/*do a*/等。

答案 1 :(得分:1)

使用逗号运算符将不同的表达式串在一起是在语言的规则范围内,但它使代码更难阅读(因为你必须发现逗号,这并不总是很容易,特别是如果表达式不是真的很简单。

另一个因素当然是你只能为if (x) ... else if(y) ...类型条件状态执行此操作。

有时,似乎人们更喜欢“可读代码”中的“短代码”,如果你参加“谁可以用最少的代码编写这个代码”,那么这当然很棒,但对于其他一切,特别是代码“显示”或与需要理解它的同事共享 - 一旦软件项目变得足够大,通常很难理解代码如何工作而不会混淆,使代码更难阅读。我没有看到第二个例子描述的方式使用条件语句有任何好处。有可能这个例子很糟糕,但一般来说,我会说“不要这样做”。

答案 2 :(得分:0)

当然可行(使用C ++ 11)。我没有尝试过解决方案但是在Herb Sutters way之后你可以使用ether函数调用或者立即执行的lambda:

cond ? 
  [&]{
    int i = some_default_value;
    if(someConditionIstrue)
    {
        Do some operations ancalculate the value of i;
        i = some calculated value;
    }
    return i;
} ()  
  : 
somefun() ;

我没有尝试编译它,但是在这里你得到的结果是用lambda或普通函数计算的。