为什么C 允许您在初始定义中引用声明的变量
Why does C++ allow you to reference a declared variable in the initial definition?
以下程序编译并运行正常。
#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
的定义即可完成(这也是声明),并且可以在其自己的初始化器中参考。
相关文章:
- 错误:使用通用引用的声明冲突
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- 关于隐式声明的复制构造函数的引用在逻辑上不清楚
- 使用 enable_if 在按值传递与按引用传递之间更改函数声明
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- 为什么转发声明的好友类不能在类中引用?
- 如何在方法主体中返回声明向量的引用?
- using声明不能引用类成员
- 是否可以在 using 声明中引用用户定义的转换模板?
- 是否可以在引用另一个派生类的派生类中声明复制构造函数?
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 为什么C 允许您在初始定义中引用声明的变量
- 模板类中的条件引用声明
- 自动声明的变量有时是通过引用声明的
- 为什么一旦我将引用声明为 const 然后它可以采用不同类型的数据?
- GCC要求此引用声明使用constexpr说明符是否正确
- 在同一语句中编写引用声明和赋值
- 引用声明是否为引用对象引入新名称
- 用const和引用声明变量
- 通过C++中的引用声明传递