定义静态数据成员和成员函数的外部关键字,C++

ign*_*tec 5 c++ extern linkage language-lawyer

C++标准是否允许extern定义静态数据成员和成员函数的关键字(假设链接匹配)?例如:

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

extern int A::a;
extern void A::f() {}
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 6

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

[...] extern说明符不能用于类成员或函数参数的声明.[...]

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

除非[规则],否则声明是一个定义.

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