【发布时间】:2014-01-12 22:35:37
【问题描述】:
我沉迷于“无括号”ifs,像这样:
if (a) b++, c++, d = e;
但有一件烦人的事情是return 不能成为最后一部分的一部分。直觉上我觉得为什么会这样,但是任何人都可以用编程语言来解释为什么这不会编译吗?
main() {
int a, b, c, d, e;
if (a) b = c, d = e, return;
}
如果你在乎,也请解释一下为什么会这样设计,这对我来说似乎是一个缺陷。我可以在 C 中理解,但在 C++ 中,它可以重新设计,而不会与现有 C 代码发生重大兼容性损失。
只是为了比较:这些将编译并完全符合预期:
while (a < 10) a++, b--, c += 2;
while (a < 10) if (a == 5) half = a, save();
【问题讨论】:
-
你在圣诞老人的淘气名单上。
-
return b = c, d = e;不会让你的船浮起来?它不会浮动我的,但那些用于无括号 if 的逗号也不会。 -
这简直是邪恶的——如果你写这样的代码,我不会雇用你。
-
因为设计者认为
if (a) [&]{ b = c, d = e; return; }();提供了足够的功能(警告:仔细阅读:))。或者你可以写if (a) return b = c, d = e, void(); -
@DeadMG 我认为很明显我说的是实际的符号括号
{},而不是一些隐喻的概念。
标签: c++ compiler-errors operators