子类是否在C++中共享父类的静态变量?

Lin*_*ios 1 c++ static map

可能重复:
是否继承了静态成员?(C++)

如果我有一个父类(Base)并且它有一个静态std::map,那么Base和它们Base的孩子都有相同的一致std::map吗?如果没有,我怎么能让他们分享呢?

Oli*_*rth 7

是的,他们都分享:

class A {
protected:
    static std::map<int,int> x;

public:
    static void push(int a, int b) { x[a] = b; }
};

class B : public A {
public:
    static int size() { return x.size(); }
};

int main() {
    A::push(5,3);
    A::push(4,2);
    std::cout << B::size() << "\n";  // Displays "2"
}
Run Code Online (Sandbox Code Playgroud)

当然,除非其中一个子类声明自己的成员变量具有相同的名称,否则将隐藏基类版本.