我想执行以下操作:
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语句转换为三元条件运算符。
关于编码标准等问题的任何建议都是不受欢迎的。
答案 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或普通函数计算的。