class A中的static A a

个人主页:Lei宝啊 

愿所有美好如期而遇


下面的代码是可行的吗?

class A
{
private:
    A a;
};

显而易见,不可行,会引发无限递归的构造,如果我们希望能够在类中有某种形式的自引用,可以使用静态成员变量,就像这样:

class A
{
private:
    static A a;

};

A A::a;

那么也许你会有疑问:静态的就不会有无限递归的构造吗?静态的A a内部不会再有静态的A a吗?那么首先我们就要明白,静态成员变量不属于类实例化对象的一部分,他是属于整个类的,被类的所有实例化对象所共享,属于一个类的单独实体。

回答不会无限递归构造的原因:

构造时机:静态成员变量在main函数之前会被构造,并且只会被构造一次,这意味着它不会在每个 A 类的实例创建时被重复构造

访问方式:静态成员变量通过类名和作用域解析操作符(::)来访问,而不是通过类的实例。这进一步强调了静态成员变量与类实例的分离

作用域:静态成员变量属于类的作用域,而不是任何特定实例的作用域。因此,它不依赖于类的任何实例来存在

回答第二个问题:

静态成员变量是属于类本身的,不属于实例,所以,即使是静态的A a,在创建时,内部不会有静态的A a。 

你可能感兴趣的:(C++,开发语言,c++)