C++ 是§;3.3.7/4是否从N4567冗余?
根据N4567第3.3.7节第4段的规定 扩展到或超过类定义结尾的声明的潜在范围也扩展到由其成员定义定义的区域,即使成员是在类之外的词汇上定义的 但是,我认为没有必要明确说明,因为这样一个成员定义必须在该声明的范围内,而不管其词汇定位如何。换言之,似乎不存在这样一个成员定义超出《宣言》范围的情况。请参见以下示例:C++ 是§;3.3.7/4是否从N4567冗余?,c++,language-lawyer,C++,Language Lawyer,根据N4567第3.3.7节第4段的规定 扩展到或超过类定义结尾的声明的潜在范围也扩展到由其成员定义定义的区域,即使成员是在类之外的词汇上定义的 但是,我认为没有必要明确说明,因为这样一个成员定义必须在该声明的范围内,而不管其词汇定位如何。换言之,似乎不存在这样一个成员定义超出《宣言》范围的情况。请参见以下示例: int always_visible=10; class some { int foo(void); }; int some::foo(void) { // no
int always_visible=10;
class some {
int foo(void);
};
int some::foo(void) {
// no ambiguity occurs because its member definition
// is always in the scope of always_visible.
return always_visible;
}
我认为它的成员定义不可能先于“始终可见”的声明,在这种情况下,上面的措辞可能有用。那么,为什么需要澄清呢?成员定义可以在不同的文件中?也许?
#include members.c
@KerrekSB我认为这是不可能的,因为最大声明区域是一个翻译单元。事实上,这给了我一个错误。也考虑<代码>命名空间A {int i=0;结构B {0} f();}无效a::b::f-({int x=i;/*可见!*/} < /代码>)。i
是可见的,即使A::B::f
的定义没有嵌套在A
中。尽管这些规则与3.4.1(不合格名称查找)中的“应在……中声明”规则有点重复,后者也定义了潜在的范围。潜在作用域的定义是基于非限定名称查找的成功,或多或少(除非我遗漏了什么)。@EugeneZavidovsky我不知道你在说什么。这正是我以前说过的。我发表评论的目的是问他为什么提到一位成员的潜在范围。