c++结构体初始化未生效

在c语言中,我们通常都是用memset来初始化一个结构体。但是在c++中,使用memset来初始化一个结构体,却经常得不到正常的结果。这是为什么呢?
问题其实是出在了,结构体成员变量类型上了,因为使用了非ADT类型(大致就是c++一些特有的类型,如string,vector等等)。memset初始化的时候,是将一块固定大小的内存置空,而string,vector等的大小并不是固定的,而是会动态变化的,所以当大小发生了变化,这是memset的初始化便是未定义的行为了,所以有时会导致严重的bug。这也是c++在提供接口时,必须使用ADT类型的原因。比如要把string换成char数字,vector换成数组等。
那么在c++中如何初始化这些特殊的结构体呢?在c++中struct和class除了权限属性不一样外,其他具有一样的属性。
所以可以模仿class初始化来初始化这些结构体。

    struct stStudent
    {
    	public:
    	stStudent()
    	{
    		age = 0;
    	}
	
	string name;//name不初始化不会影响结果,因为string是有构造函数的,
						//在stStudent构造的时候,是会调用string的构造的
	int age;
};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值