N4567 中的 §3.3.7/4 是多余的吗?

Is §3.3.7/4 from N4567 redundant?

本文关键字:多余 中的 N4567      更新时间:2023-10-16

根据N4567,3.3.7第4段,

延伸到类定义末尾或超过类定义末尾的声明的潜在范围也延伸到其成员定义定义的区域,即使成员是在类外部词汇定义的。。。

然而,我认为没有必要明确说明,因为无论其词汇定位如何,这样的成员定义都必须在声明的范围内。换言之,似乎不存在这种成员定义超出声明范围的情况。参见以下示例:

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;
}

我认为它的成员定义不可能在声明always_visible之前,在这种情况下,上面的措辞可能有用。那么,为什么需要澄清呢?

扩展到类定义末尾的声明的潜在范围也扩展到其成员定义的主要情况是,当有问题的声明是该类的成员时:

class C {
    int x;
    int f();
};
int C::f() {
    return x;
}

xC::f的定义中使用时处于作用域中,但在C的右大括号之后就不在作用域中了。

";或超过终点";部分嗯,它很容易发生在嵌套类中:

class Outer {
    static int x;
    class Inner {
        int f();
    };
};
int Outer::Inner::f() {
    return x;
}

这里,由于x的潜在作用域延伸到了Inner定义的末尾,一直延伸到Outer定义的末尾。因此,x也在Inner成员定义的作用域中。