【发布时间】:2014-05-26 10:10:38
【问题描述】:
if 语句的分支不能只是一个声明。如果我们需要在分支中引入名称,则必须将其包含在块中。-----by TC++PL 4th。
void f1(int i)
{
if (i)
int x = i + 2; //error: declaration of if-statement branch
}
但它在 VS2013 和 GCC4.8 的编译器上是有意义的。
工作草案(N3242)告诉我
如果选择语句中的子语句是单个语句而不是复合语句,就好像它被重写为包含原始子语句的复合语句。
代码可以等效地改写为:
void f1(int i)
{
if (i) {
int x = i + 2;
}
}
因此在 if 语句之后,x 不再在范围内。
那么标准是什么?
【问题讨论】:
-
"但它在 VS2013 和 GCC4.8 的编译器上是有意义的。" - 不,它没有,只是这些编译器接受了废话。
-
可能后者将成为新标准,即使它对我来说看起来很丑:)
-
你的问题不太清楚。
-
@user3477950:我认为工作草案和当前标准之间在这方面没有任何相关差异——或者在任何 C++草案或标准中。如果你知道一个,请引用它。
-
@CantChooseUsernames:该示例没有用,但假设声明的目的是调用构造函数和/或析构函数。这不一定是好风格,但完全合法。
标签: c++ if-statement syntax grammar