在嵌套类的封闭类范围内定义成员函数

Definition of member functions in the scope of the enclosing class for a nested class

本文关键字:定义 成员 范围内 函数 嵌套      更新时间:2023-10-16

在 c++ 草案标准中,我们在 [class.nest] 中有这样的语句:

2 嵌套类的成员函数和静态数据成员可以在包含其类定义的命名空间作用域中定义。 [示例:

struct enclose {
    struct inner {
        static int x;
        void f(int i);
    };
};
int enclose::inner::x = 1;
void enclose::inner::f(int i) { /* ... */ }

—结束示例 ]

我的困惑是,如果这是可能的,那么为什么以下是不可能的:

struct enclose {
    struct inner {
        void f(int i);
    };
    void inner::f(int i) {}
};

错误:无法在"封闭"中定义成员函数"enclose::inner::f" void inner::f(int i( {}

f的定义不是包含在包含inner类定义的同一范围内吗?

如果不是,那为什么不允许这样做?在类范围内定义此函数有什么问题?

您引用的措辞说它可以在命名空间范围内定义。您正在尝试在 struct enclose 中定义它,这是类作用域,而不是命名空间作用域。