快速初始化成员变量和sizeof

1.快速初始化成员变量

①在C++98的标准
可以在类中使用 “=初始值” 的方式来对类中的成员进行初始化,但是是十分严格的,,如果静态成员不满足常量性,且成员不是整型或枚举类型,是无法初始化的
非静态成员的初始化,在构造函数中进行
在这里插入图片描述

②在c++11当中,可以使用= {} 来对非静态成员变量来进行初始化

class Test
{
     int a = 10;
     double b{ 1.3 };

     vector<int> c{ 1,2,3,4,5 };

     
};

列表初始化和大括号初始化,二者并非等价的

class Test
{
     int a = 10;
     double b = 1.3 ;
     C e{1};  //C e(1) Error
     string d{ "Hello" }; //string d( "Hello" ); Error
     vector<int> c{ 1,2,3,4,5 };//vector<int> c( 1,2,3,4,5); Error

     
};

2.初始化列表和就地初始化

我们可以使用就地初始化和初始化列表来对成员变量进行赋值
那么当二者同时使用的时候,结果是什么呢?

class Test
{
public:
     Test() { cout << "default " << endl; }
     Test(int num, string& str):nNum(num), s(str)
     {

     }
private:
     int nNum = 10;
     string s{ "Hello" };
};
     Test Defobj;
     Defobj.Get();//10 Hello


     string a("world");
     Test Obj(50, a);
     Obj.Get();//50 world

我们可以看出,初始化列表总是后作用于就地初始化的,可以说初始化列表的优先级更大
对于非常量的静态成员变量,还是保持和C++98一样的标准

private:
	static int a = 20; //不能过编译 

3.非静态成员的sizeof

在C++98标准中,对非静态成员使用sizeof是不允许的。
只能sizeof静态成员或者对象的实例

只可以sizeof(class.staticvar)
或者sizeof(obj.var)

要想通过类获取非静态成员大小必须
sizeof(((class*)0) -> var)

C++11无需这么做,可以直接求取

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值