【发布时间】:2012-05-27 00:03:26
【问题描述】:
在 Lua 中,您可以这样做:
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 中,您可以这样做:
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++ 中是否有与此等价或类似的东西?
【问题讨论】:
我想这就是你想要的:
foo = a ? b : (c ? d : e );
【讨论】:
这是ternary operator。它有一个有趣的优先级,所以最好总是用括号括起来。
bool foo = ( a ? b : ( c ? d : e ) )
请注意,这仅适用于 b、d 和 e 可以缩减为相同类型的情况。如果a 是double,d 是float 并且e 是int,则您的结果将始终转换为double。
【讨论】:
?: 的优先级有什么好玩的?它低于任何非赋值运算符,高于所有赋值运算符,仅此而已。所以你可以很容易地省略外括号。更有趣的是它的关联性,这就是为什么你需要嵌套?:s 之间的括号。
foo = c=='x' ? x : y 或foo = a||b ? x : y 这样的东西是有意义的,所以它的优先级必须低于逻辑和比较运算符。 — 另外,我需要收回我所说的关联性:它只是右关联,因此您也可以省略内部括号。虽然你应该用适当的缩进将表达式分散到三行,否则它变得不可读。
可以使用三元运算符?:
foo = a ? b : c ? d : e;
【讨论】:
不是真的。这在 Lua 中工作的主要原因是因为动态类型在 C++ 中你永远无法真正让它工作。您可以获得的最接近的是三元运算符,但它有 srs 限制。
【讨论】:
在 C 或 C++ 中使用 && 表示 然后 并使用 || 表示 否则
将三元 ?: 用于条件表达式
【讨论】: