为什么C 允许您在初始定义中引用声明的变量

Why does C++ allow you to reference a declared variable in the initial definition?

本文关键字:引用 声明 变量 定义 许您 为什么      更新时间:2023-10-16

以下程序编译并运行正常。

#include <iostream>
using namespace std;
int main() {
    size_t foo = sizeof(foo);
    cout << foo << endl;
    return 0;
}

使用汇编命令

clang++ -o wut -Wall -Wextra -Werror -pedantic -ansi test.cc

我知道这是可能的等效的

size_t foo;
foo = sizeof(foo);

更有意义。

但是,初始陈述使我有些不安,因为我想到执行LHS(或总体语句)之前对RHS进行了评估 - 在这种情况下,这可能表明foo尚不存在。

但是,我的假设是 size_t foo始终首先发表声明,在编译时间期间被分解为自己的语句,然后是定义。

我的假设正确吗?该规范中的规范/定义是否很好?如果是这样,哪个部分?我意识到我使用-ansi编译了,但是我尝试使用的所有标准版本似乎都没有错误。

您正在寻找[basic.scope.pdecl]:

名称的声明点是在其完整声明器(第11条)和初始化器(如果有)之前立即(如果有),则如下所述。

因此,一旦到达=foo的定义即可完成(这也是声明),并且可以在其自己的初始化器中参考。