gpt4 book ai didi

c++ - 命名空间范围与类内范围

转载 作者:太空宇宙 更新时间:2023-11-04 14:07:23 25 4
gpt4 key购买 nike

有这段代码:

namespace N {
struct B {
void f() {
i;
j;
}
int i;
};
int j;
}

int main() {
return 0;
}

找到变量 i 但找不到变量 j。类中的变量在声明之前可以使用,但命名空间却不起作用,这是怎么回事? i 是如何找到的 - 编译器首先解析所有类以找到所有成员,然后将其与成员函数的引用绑定(bind)?

最佳答案

确实,成员函数的主体(以及变量初始值设定项)在类定义之后的阶段进行处理。您可以通过尝试在其他成员声明中使用成员来检查“使用前声明”规则是否对类成员仍然完全有效:

struct B
{
char c[sizeof i];
int i;
};

演示:http://ideone.com/v1ksio

struct B2
{
decltype(i) f();
int i;
};

这也会影响需要完整类型的类本身的使用。

struct B
{
static char c[sizeof (B)];
};

演示:http://ideone.com/Z9XOzm

但这没关系,因为变量初始值设定项是在构造定义时处理的,其中所有成员都是已知的并且类型是完整的:

struct B
{
unsigned r{sizeof s};
unsigned s{sizeof (B)};
};

关于c++ - 命名空间范围与类内范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364281/

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