C ++标准是否允许extern
关键字定义静态数据成员和成员函数(假设链接匹配)?例如:
struct A
{
static int a; // external linkage
void f(); // external linkage
};
extern int A::a;
extern void A::f() {}
答案 0 :(得分:6)
不允许extern
关键字作为类成员的存储类说明符。来自[dcl.stc] / 5:
[...]
extern
说明符不能用于类成员或函数参数的声明。 [...]
此外,定义是声明,参见[basic.def] / 2:
除非[规则],否则声明是定义。
因此,extern
关键字不允许作为任何形式的类成员声明的存储类说明符,无论是作为类定义的一部分的第一个声明还是作为out-of的一部分的后续声明。 -line成员定义。