假设我有一个函数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 ++魔术来实现吗?对你们这听起来可能微不足道,但我真的很想这样做。我做了搜索,也问过,但没有骰子。谢谢!
答案 0 :(得分:6)
否强>
您的第二段代码是正确/正确/最佳/最清晰/最简单的方法。
不要试图太聪明。
答案 1 :(得分:6)
你可以这样做:
bool
这可行,因为if()
自然会转换为e
,因此当true
是非零值时,{{1}}会成功(或者如果它转换为{{1}} bool值。)
这样做的好处是,您不会使用错误返回值乱丢周围的范围。虽然对于某些程序员来说,将函数调用与测试分开可能并不是那么明显。
答案 2 :(得分:0)
不完全符合您的要求,但如果原因仅在记录中,您可以使用for
代替if
:
for(int e = MyFunction(); e!=0; e=0) MessageBox(e);
但是我不确定是否有任何理由将正常的清晰代码替换为这样的语句。没人会推荐你这样的解决方案。