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。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lei宝啊

觉得博主写的有用就鼓励一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值