【问题标题】:Equivalent to Lua "and/or" in C++?相当于 C++ 中的 Lua“和/或”?
【发布时间】: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++ 中是否有与此等价或类似的东西?

【问题讨论】:

    标签: c++ lua


    【解决方案1】:

    我想这就是你想要的:

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

    【讨论】:

      【解决方案2】:

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

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

      请注意,这仅适用于 bde 可以缩减为相同类型的情况。如果adoubledfloat 并且eint,则您的结果将始终转换为double

      【讨论】:

      • ?: 的优先级有什么好玩的?它低于任何非赋值运算符,高于所有赋值运算符,仅此而已。所以你可以很容易地省略外括号。更有趣的是它的关联性,这就是为什么你需要嵌套?:s 之间的括号。
      • @leftaroundabout 它没有我期望的优先级。示例:stackoverflow.com/q/10007140/382471
      • 优先级是相当合理的:写foo = c=='x' ? x : yfoo = a||b ? x : y 这样的东西是有意义的,所以它的优先级必须低于逻辑和比较运算符。 — 另外,我需要收回我所说的关联性:它只是右关联,因此您也可以省略内部括号。虽然你应该用适当的缩进将表达式分散到三行,否则它变得不可读。
      【解决方案3】:

      可以使用三元运算符?:

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

      【讨论】:

      • 虽然没有必要在这里添加括号,但我还是会这样做以提高清晰度——上面的代码几乎可以用一堆单字母变量名来阅读,但任何比给出的例子很快就会变得难以管理。
      【解决方案4】:

      不是真的。这在 Lua 中工作的主要原因是因为动态类型在 C++ 中你永远无法真正让它工作。您可以获得的最接近的是三元运算符,但它有 srs 限制。

      【讨论】:

      • 有什么限制?所有其他答案都指向三元运算符。
      【解决方案5】:

      CC++ 中使用 && 表示 然后 并使用 || 表示 否则

      将三元 ?: 用于条件表达式

      【讨论】:

      • -1 这个问题是关于 c++ 的。没有必要用“&&”代替“and”。
      猜你喜欢
      • 1970-01-01
      • 2021-12-31
      • 2012-07-07
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2014-03-06
      • 2016-06-23
      • 1970-01-01
      相关资源
      最近更新 更多