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

时间:2016-08-13 12:02:52

标签: c++ language-lawyer extern linkage

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

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

extern int A::a;
extern void A::f() {}

1 个答案:

答案 0 :(得分:6)

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

  

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

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

  

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

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