extern关键字不应该简单地“盲目”编译器吗?以下是我无法理解为什么没有错误的代码。
struct A {
int a;
};
class B {
static A x;
public:
void f() { x.a=0; }
};
extern A B::x; // not allocated.
main() {
B z;
z.f();
}
如您所知,静态成员应该手动实例化。但是,我添加了extern关键字,这意味着它实际上没有被分配。编译很好很奇怪!
答案 0 :(得分:6)
extern
成员变量没有static
声明!无论如何,根据类的定义声明变量extern
。 gcc警告您不能将static
成员变量显式声明为extern
。但是,gcc和clang都会编译并链接代码而不会更加轻视,显然忽略了extern
。
当然,使用上面的代码,很明显你首先使用某些非标准模式进行编译,因为main()
依赖于隐式int
规则,而该规则从未成为C ++的一部分