gpt4 book ai didi

c++ - if 语句的一个分支不能只是一个声明?

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:29 25 4
gpt4 key购买 nike

A branch of an if-statement cannot be just a declaration. If we need to introduce a name in a branch, it must be enclosed in a block.------by TC++PL 4th.

void f1(int i)
{
if (i)
int x = i + 2; //error: declaration of if-statement branch
}

但它在 VS2013 和 GCC4.8 的编译器上有意义。

工作草案(N3242)向我展示了

If the substatement in a selection-statement is a single statement and not a compound-statement, it is as if it was rewritten to be a compound-statement containing the original substatement.

代码可以等效地重写为:

void f1(int i)
{
if (i) {
int x = i + 2;
}
}

因此在 if 语句之后,x 不再在范围内。

那么标准是什么?

最佳答案

在句法上,声明可以是语句。具体来说,它是一个声明语句

(我说“可以”是因为并非所有声明都是语句。例如,文件范围内的声明不能合法地出现,因此它不是语句。)

因为 if 语句的语法是:

if ( condition ) statement

if ( condition ) statement else statement

if 语句的任一分支作为声明都是完全合法的。

在你的例子中,它不是特别有用,但我可以很容易地想象你可能想要声明一个对象来执行它的构造函数和/或析构函数。

A branch of an if-statement cannot be just a declaration. If we need to introduce a name in a branch, it must be enclosed in a block.------by TC++PL 4th.

我有一份“The C++ Programming Language”的 PDF 拷贝,第 4 版,第 4 次打印,日期为 2015 年 4 月。9.3 中的声明“声明就是声明”。还在那里。该陈述是不正确的,或者至少是不完整的。声明:

A branch of an if-statement cannot be just a declaration. If we need to introduce a name in a branch, it must be enclosed in a block.

不再存在;它已更新为:

The scope of a declaration of a branch of an if-statement is just that branch. If we need to introduce a name in a branch, it must be enclosed in a block (§9.2).

这不是严格正确的,但如果您想在分支中声明,如果您想在语句中引用它,则需要将它包含在一个 block 中。仅由声明组成的分支是合法的,但通常没有用。

(顺便说一句,C 有不同的规则。自 1999 年标准以来,C 允许混合声明和语句,但它不将声明视为语句,因此在 C 中,声明不能if 语句的分支。)

关于c++ - if 语句的一个分支不能只是一个声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23026398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com