Extern关键字定义静态数据成员和成员函数,c++



c++标准允许extern关键字定义静态数据成员和成员函数(前提是链接匹配)吗?例如:

struct A
{
    static int a;    // external linkage
    void f();        // external linkage
};
extern int A::a;
extern void A::f() {}

不允许extern关键字作为类成员上的存储类说明符。从[dcl.stc]/5:

[…extern指示符不能用于类成员或函数参数的声明。[…]

此外,定义是声明,参见[basic.def]/2:

声明是定义除非[rules].

因此,extern关键字不允许在任何形式的类成员声明上作为存储类说明符,无论是在作为类定义一部分的第一个声明上,还是在作为越行成员定义一部分的后续声明上。

最新更新