在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++?
在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++?
还有ternary operator。它有一个有趣的优先级,所以总是用括号括起来是个好习惯。
bool foo = (a ? b : (c ? d : e))
请注意,这只是工作,如果b
,d
和e
可减少对同一类型。如果a
是double
,d
是float
而e
是int
,您的结果将始终转换为double
。
您可以使用三元运算?:
foo = a ? b : c ? d : e;
虽然没有必要在这里添加括号,但为了提高清晰度,我会这样做 - 上面的代码只是用一堆单个字母的变量名称可读,但比给出的示例更复杂的任何东西都会很快变为难以管理。 – Spudley
我想这是你想要什么:
foo = a ? b : (c ? d : e);
不是真的。这在Lua中起作用的主要原因是动态类型化 - 在C++中,你永远无法真正实现它。您可以得到的最接近的是三元运算符,但它具有srs限制。
有什么限制?所有其他答案都指向三元运算符。 – pighead10
@PigHead所有分支必须具有相同的类型... –
'?'的优先级有趣吗?它比任何非赋值运算符都低,并且比所有赋值运算符都要高,就是这样。因此,您可以轻松地省略外部括号。更有趣的是它的_associativity_,这就是为什么你需要在嵌套'':'之间进行匹配的原因。 – leftaroundabout
@leftaroundabout它没有我期望它的优先级。例如:http://stackoverflow.com/q/10007140/382471 – robert
优先级是相当合理的:编写诸如'foo = c =='x'之类的东西是否合理? x:y'或'foo = a || b? x:y',所以它的优先级比逻辑和比较运算符要低。 - 另外,我需要收回关于联想性的看法:这只是正确联想性的,所以你也可以省略内在的差距。虽然你应该用适当的缩进来将表达式分散在三行上,否则它变得不可读。 – leftaroundabout