嵌套类中的静态成员是否具有封闭类的静态持续时间?

时间:2016-02-22 06:18:35

标签: c++ inner-classes static-members

如果我有嵌套类,并且这些嵌套类具有静态成员,那些成员对于封闭类仍然是静态的吗?例如,如果我有

class Enclosing {
public:
    Enclosing();
private:
    class Nested {
    public:
        Nested();
    private:
        static int thing;
    };
};

如果我这样做

auto A = Enclosing();
auto B = Enclosing();

AB能否为thing设置不同的值?

1 个答案:

答案 0 :(得分:5)

  

AB能否为thing设置不同的值?

不,他们不会有不同的价值观。所有实例都会看到thing的相同值;这个类的嵌套在这里没有影响。

static个成员变量“与该类相关联”(即与该类实例相关联的非静态成员)。 From cppreference;

  

静态数据成员不与任何对象关联。即使没有定义类的对象,它们也存在。如果静态成员被声明为thread_local(从C ++ 11开始),每个线程就有一个这样的对象。否则,整个程序中只有一个静态数据成员实例,具有静态存储持续时间。

Live sample