结构体里的成员初始化问题

声明一个结构体:

struct node
{
    int age;
    string name;
    double score;
};

这里没给默认值

那么直接输出会怎么样

node temp;
cout<<temp.age<<" "<<temp.name<<" "<<temp.score;

 结果

4199040  1.33485e-306
Process returned 0 (0x0)   execution time : 0.258 s
Press any key to continue.

除去中间两个空格可知,如果成员没有默认值直接输出的话,就跟声明普通变量直接输出一样,int,double都是乱的,string为空的,总之都是不合理的

 

 

而如果结构体作为map的value,不赋值会出现什么?

map<int,node> m;
m[1];
cout<<m[1].age<<" "<<m[1].name<<" "<<m[1].score;

这里直接声明创建一个"1"的键,没有显式赋值

 

结果

0  0
Process returned 0 (0x0)   execution time : 0.377 s
Press any key to continue.

除去中间两个空格可知,int,double都是默认值0,string是空字符串

 

结构体作为value,没有赋值,也没有在声明成员的时候给默认值,也会有值

 

其实并不是没有赋值

map里的元素都是对组只有成对的才能插进去,而m[1]不是只声明了一个key,系统隐式地给value赋了默认值,然后才会成为一个对组,从而存进去map里的

 

 

结论:

当需要直接使用一个结构体而可能没赋值,担心会产生危险,可以在声明成员的时候给默认值

而如果是直接存进map作为value的,可以不用手动赋初值,系统会来做

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值