0

我想执行以下操作:

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 ? ... ;

这是畸形的吗?

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

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

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

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

在这个问题上给出的关于编码标准等的任何建议都是不受欢迎的。

4

3 回答 3

3

不要将布尔值与真假进行比较。没有意义,因为它们已经是真假了!写吧

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

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

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

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

于 2013-04-24T12:05:45.143 回答
1

使用逗号运算符将不同的表达式串在一起是符合语言规则的,但这会使代码更难阅读(因为您必须找出逗号,这并不总是容易的,尤其是在表达式不是很简单的情况下。

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

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

于 2013-04-24T12:14:59.700 回答
0

当然可以(使用 C++11)。我还没有尝试过解决方案,但是按照Herb Sutters 的方式,您可以使用 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 或普通函数计算的。

于 2013-04-24T12:22:41.007 回答