有这段代码:
namespace N {
struct B {
void f() {
i;
j;
}
int i;
};
int j;
}
int main() {
return 0;
}
找到变量i
但未找到变量j
。如何在类声明之前使用该类中的变量,但这对于名称空间不起作用?如何找到i
- 编译器首先解析所有成员然后将其与成员函数的引用绑定?
答案 0 :(得分:0)
实际上,成员函数(以及变量初始值设定项)的主体在比类定义更晚的阶段进行处理。您可以通过尝试在其他成员声明中使用成员来自行检查“使用前声明”规则对类成员是否仍然完全有效:
struct B
{
char c[sizeof i];
int i;
};
struct B2
{
decltype(i) f();
int i;
};
这也会影响类本身的使用,这需要一个完整的类型。
struct B
{
static char c[sizeof (B)];
};
但这没关系,因为在构造定义处理变量初始值设定项时,所有成员都已知并且类型已完成:
struct B
{
unsigned r{sizeof s};
unsigned s{sizeof (B)};
};