C++怎么避免使用暴露的联合体
发表于:2024-11-20 作者:千家信息网编辑
千家信息网最后更新 2024年11月20日,本篇内容介绍了"C++怎么避免使用暴露的联合体"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!C.18
千家信息网最后更新 2024年11月20日C++怎么避免使用暴露的联合体Alternative(可选项)
本篇内容介绍了"C++怎么避免使用暴露的联合体"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
C.181:避免使用"暴露的"联合体
Reason(原因)
暴露的联合体指的是不包含用来表示哪个(如果存在的话)成员有效的标志的联合体,程序员必须对数据流保持跟踪。暴露状态的联合体是错误的源头之一。
Example, bad(反面示例)
union Value {
int x;
double d;
};
Value v;
v.d = 987.654; // v holds a double
到目前为止还好,但是我们会很容易地错误使用这个联合体:
cout << v.x << '\n'; // BAD, undefined behavior: v holds a double, but we read it as an int
注意类型错误是在没有任何显式类型转换的情况下发生的。但我们测试这段程序的时候,输出的最后一个值是1863627180,它是987.654的二进制对应的整数值。我们在这里遇到的是一个"不可见"类型错误,它恰巧给出一个很容易被判断为没有问题的结果。
另外,谈到"不可见",下面的代码不会产生输出:
v.x = 123;
cout << v.d << '\n'; // BAD: undefined behavior
Alternative(可选项)
将联合体和一个类型字段封装为一个类。
The C++17 variant type (found in
C++17的variant类型(可以在
variant v;
v = 123; // v holds an int
int x = get(v);
v = 123.456; // v holds a double
w = get(v);
"C++怎么避免使用暴露的联合体"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
联合体
联合
类型
错误
输出
C++
内容
情况
更多
知识
程序
v.x
实用
有效
学有所成
接下来
二进制
代码
原因
反面
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
用友t3数据库导出
数据库select关键字是
服务器java运行内存不足
软件开发商医疗电话
网络安全的英文作文150字
江西医疗器软件开发
战地3服务器搜索引擎
太原市服务器搬家选哪家
吉林网络技术
银行 抢 软件开发
吴兴租房软件开发
协议登录一号一IP软件开发
四川中小学生道德与网络安全
怎么看待github服务器
学数据库该学什么数据库软件
南京erp软件开发教程
常州智慧医院软件开发
计算机等级网络技术学习
sqlite 数据库恢复
涛城网络技术商家小纸条
数据库中替换
四川服务器虚拟化定做
怎么看数据库装好没有了
超融合通用服务器
程序员软件开发男
穿越火线泰国服务器怎么上
2t硬盘服务器辐射
电脑配件库存管理数据库
预定数据库
倩女碧海潮生服务器