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
关键字不允许在任何形式的类成员声明上作为存储类说明符,无论是在作为类定义一部分的第一个声明上,还是在作为越行成员定义一部分的后续声明上。