static,const,static const , const static成员初始化

1.类里的const成员初始化:
在一个类里建立一个const时,不能给它初值。像
class A

public:
   const int i=100;
   A

   {
  
  
};

    这样的初始化方式是不能通过编译的,因为在类对象里进行了存储空间分配,编译器不能知道const的内容是什么,所以不能把它用作编译期间的常量。这意味着对于类里的常数表达式来说,const就像它在C中一样没有作用。因此这个初始化工作必须发生在构造函数里,并且,要在构造函数的某个特别的地方。因为const必须在建立它的地方被初始化,所以在构造函数的主体里,const必须已初始化了,所以不能在构造函数体中初始化。
构造函数初始化表达式
class A

public:
    const inti;
   A():i(9)
    {

    //不能在函数体中进行
    
};

如果构造函数是在类外定义,则可以这样写:
class A

public:
    const inti;
    A();
 };

A::A():i(100){}


2.类里的static成员初始化:
类中的static变量是属于类的,而不是属于某个对象,它在整个程序的运行过程中只有一个副本,因此不
能在定义对象时对变量初始化,就是不能用构造函数来初始化。其正确的初始化方式是:
<数据类型><类名>::<静态数据成员名>=<值>,例如
class foo
{
private:
   const int i;
public:
   foo();
};
int foo::i=100;
这表明:
(1)初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
(2)初始化时不加该成员的访问权限控制符private,public等。
(3)初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

3.类里的static const 和const static成员初始化:

    conststatic与static const初始化方法是一样的,可以再类内或类外进行初始化,但不能在构造函数中进行。

class A

public:
 const static int i=9;
 A()
 {
     //不能在函数体及初始化列表中进行(const要求)
 
};

//const int A::i =90; //也可以在这里进行,但不能加static

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值