如何解决在类非嵌套类中进行前向声明
我遇到了这个奇怪的前向声明(或其他内容),而不是普通的声明:
class A;
class B{
A* var;
}
你可以做
class B{
class A* var;
}
现在这可能是一个详细的类型说明符,但是我不确定。 我自己进行了尝试,没有任何问题,甚至使我的代码更加整洁,但我担心它可能会导致我目前不知道的范围界定问题。
有人对此有见识吗?这是有效的正向减速吗?
示例:https://youtu.be/EIptJ0YrYg0?t=412
解决方法
请注意,文档显示:
请注意,详细的名称也可以引入新的类名 类型说明符,它作为另一个声明的一部分出现,但仅 如果名称查找找不到具有相同名称的先前声明的类 名称。
因此,如果类B
被包含在命名空间中,并且没有执行先前的A
前向声明,则它引用了必须定义的n2::A
。
现在这可能是一个详细的类型说明符,但是我不确定。
是的。实际上,class A;
是使用精心设计的类说明符的声明。
但是我担心这可能会导致我目前不了解的范围界定问题
您应该了解的唯一与范围界定有关的一点是,如果是第一次引用精心设计的类型说明符(本身不是声明),则其行为与向其中引入前向声明的行为相同。最近的名称空间或块作用域。例如
namespace N {
class foo {
class bar {
void func(class baz*);
};
};
};
...与
相同namespace N {
class baz;
class foo {
class bar {
void func(baz*);
};
};
};
,
是的,这是有效的前向声明。这就是精心设计的类型说明符。
引用cppreference中的elaborated type specifier。
如果名称查找未找到先前声明的类型名称,则通过类,结构或联合(即不是通过枚举)引入elaborated-type-specifier,并且class-name是不合格的标识符,则进行详细说明-type-specifier是类名称的类声明。
即使其名称被非类型声明隐藏,它也可以用于引用已声明的类。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。