2012-05-26 42 views
3

在Lua中,你可以这样做:相当于Lua“和/或”在C++中?

foo = a and b or c and d or e 

即相当于(至少我敢肯定这是等同于):

local foo = nil 
if a then 
foo = b 
elseif c then 
foo = d 
else 
foo = e 
end 

有什么等同或类似于此C++?

回答

5

还有ternary operator。它有一个有趣的优先级,所以总是用括号括起来是个好习惯。

bool foo = (a ? b : (c ? d : e)) 

请注意,这只是工作,如果bde可减少对同一类型。如果adoubledfloateint,您的结果将始终转换为double

+0

'?'的优先级有趣吗?它比任何非赋值运算符都低,并且比所有赋值运算符都要高,就是这样。因此,您可以轻松地省略外部括号。更有趣的是它的_associativity_,这就是为什么你需要在嵌套'':'之间进行匹配的原因。 – leftaroundabout

+0

@leftaroundabout它没有我期望它的优先级。例如:http://stackoverflow.com/q/10007140/382471 – robert

+0

优先级是相当合理的:编写诸如'foo = c =='x'之类的东西是否合理? x:y'或'foo = a || b? x:y',所以它的优先级比逻辑和比较运算符要低。 - 另外,我需要收回关于联想性的看法:这只是正确联想性的,所以你也可以省略内在的差距。虽然你应该用适当的缩进来将表达式分散在三行上,否则它变得不可读。 – leftaroundabout

2

您可以使用三元运算?:

foo = a ? b : c ? d : e; 
+0

虽然没有必要在这里添加括号,但为了提高清晰度,我会这样做 - 上面的代码只是用一堆单个字母的变量名称可读,但比给出的示例更复杂的任何东西都会很快变为难以管理。 – Spudley

-3

使用&&ç++然后和使用||否则

使用三元?:条件表达式

+0

-1这给你一个布尔结果。 – delnan

+0

-1这个问题是关于C++的。没有必要使用“&&”而不是“和”。 –

6

我想这是你想要什么:

foo = a ? b : (c ? d : e); 
1

不是真的。这在Lua中起作用的主要原因是动态类型化 - 在C++中,你永远无法真正实现它。您可以得到的最接近的是三元运算符,但它具有srs限制。

+2

有什么限制?所有其他答案都指向三元运算符。 – pighead10

+1

@PigHead所有分支必须具有相同的类型... –