【问题标题】:C++ inline if fails in switch如果切换失败,则 C++ 内联
【发布时间】:2011-10-26 03:37:27
【问题描述】:

我刚刚发现内联 if (A?B:C) 在 switch 语句中无法按预期工作。

其中 A 为布尔值,B 和 C 均为不等于 0 的整数。此语句的结果放在开关内时为 0。

我发现了一个 stackoverflow 帖子 [1],其中提到了这种行为,但我找不到任何解释为什么这不能像我预期的那样工作。这是什么原因造成的?

例如:

int foo = 6;

switch(foo)
{
case 6:
  return 10 + true ? 2 : 4;
}

[1]Benefits of inline functions in C++?

【问题讨论】:

  • 请给出一个代码示例来说明您的意思。
  • 这叫做“条件运算符”或“三元运算符”,而不是“内联 if”。链接的讨论是关于不相关的内联函数。贴一些代码。
  • 你的意思是switch (a?b:c) {...}
  • int foo = 6; switch(foo) { case 6: return 10 + true?2:4; }
  • 该代码有什么“不起作用”的地方?

标签: c++ gcc switch-statement inline-if


【解决方案1】:

这与switch无关。

10 + true ? 2 : 4

相当于:

(10 + true) ? 2 : 4.

如果你想让它表现得像:

10 + (true ? 2 : 4)

那么你需要这样写。

【讨论】:

  • 哇!我想知道为什么在我的小示例中重新创建它时遇到这么多麻烦。谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2014-06-09
  • 2015-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多