首页 > 编程语言 > 详细

20. struct,union和enum简单模拟variant

时间:2020-04-30 11:08:50      阅读:58      评论:0      收藏:0      [点我收藏+]

两个结构体赋值时,如果存在指针成员,这时候复制了指针的值,而不是指针目标的值,称为浅拷贝。函数调用传递结构体而不是结构体指针时,隐含浅拷贝,这点需要注意。

 

避免两个结构体中的指针成员引用同一资源的方法:

1.如果有条件,让每个结构体变量中的指针成员各自拥有独立的资源(深拷贝)。

2.引用计数,所有结构体变量中的指针成员同时引用同一资源,但记录引用情况,满足条件则真正处理该资源。

 

给union 中的成员赋值时,相当于获取union 变量的地址并强制转换成对应类型的指针,再往里写入数据。

union MyUnion {

char c;

int i;

float f;

double d;

};

 

MyUnion me;

me.c = ‘A‘;

*(char *)&me = ‘A‘;

 

me.i = 999;

*(int *)&me = 999;

 

me.f = 99.9f;

*(float *)&me = 99.9f;

 

me.d = 99.9;

*(double *)&me = 99.9;

 

枚举只能代替符号化整形宏。

变体的一种实现思路是,利用enum设置类型,union设置各种要包含的类型,并定义一组set/get函数,编译器配合不显示函数名的话,看起来就像:

a = 123;

a = 99.8;

a = ‘A‘;

a = "Hello";

 

20. struct,union和enum简单模拟variant

原文:https://www.cnblogs.com/Nutshelln/p/12806890.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!