【问题标题】:How to declare a variable inside an if condition?如何在 if 条件中声明变量?
【发布时间】:2016-04-23 22:25:45
【问题描述】:

假设我有一个函数 MyFunction,它返回一个从 0 到 10 的值。0 表示成功,非零表示失败。如果我想仅在值为非零时显示带有该值的 MessageBox,我必须执行以下操作:

int e = MyFunction();
if (e != 0) { MessageBox(e); }

如果我想让变量 int e 成为本地变量而不导致重新定义(因为我不擅长命名或其他什么),我可以将整个内容括在花括号中并像这样隔离变量:

int e;
{ int e = MyFunction(); if (e != 0) { MessageBox(e); } }

是否可以将它压缩成一个 if 语句,而不是像这样:

if (int e = MyFunction() != 0) { MessageBox(e); } //obviously does not work as intended

我知道语句是否真的不能以这种方式工作,但是否有可能通过使用一些 c++ 魔法来做到这一点?这对你们来说可能听起来微不足道,但我真的很想这样做。我做了搜索,也问了,但没有骰子。谢谢!

【问题讨论】:

  • ...c++ 魔法...问独角兽。
  • 因为我不擅长命名什么的嗯... :)
  • 如何使用异常进行错误管理?
  • 你可以试试这个:if (MyFunction()) { MessageBox(e); }。在 C++ 中,任何非零值始终为 true
  • @ĐăngKhoaHuỳnh 你注意到这里的eMessageBox(e);

标签: c++


【解决方案1】:

你可以这样做:

if(int e = MyFunction())
{
    MessageBox(e);
}

这是可行的,因为int 自然地转换为bool,所以if()e 是任何非零 值(或者如果它转换为true bool 值)时成功.

这样做的好处是您不会在周围的范围内乱扔错误返回值。尽管对于某些编码人员来说,将函数调用与测试分开可能并不那么明显。

【讨论】:

  • 有些人认为这种隐含的真实性条件不明确/形式不佳,尤其是在 C++ 中。我不一定是其中之一。
  • @LightnessRacesinOrbit 我还没有完全决定这个问题。至少有一个关于具有可选值的状态返回类型的建议,以促进这种风格。我确实认为它清除周围范围的事实很​​有价值,并且可能有助于减少来自共享返回代码变量和一般变量垃圾的错误。
【解决方案2】:

没有。

您的第二个代码 sn-p 是正确/正确/最好/最清晰/最简单的方法。

不要太聪明。

【讨论】:

    【解决方案3】:

    不完全是您想要的,但如果原因只是出现在记录中,您可以使用for 而不是if

    for(int e = MyFunction(); e!=0; e=0) MessageBox(e);
    

    但我不确定是否有任何理由将普通的明文代码替换为这样的语句。没有人会向您推荐这样的解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 1970-01-01
      • 2013-01-15
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      相关资源
      最近更新 更多