c++ - int 和 float 之间的不兼容(关于哪些标准)
问题描述
我正在阅读有关严格别名并停止引用说:
对象的存储值只能由具有以下类型之一的左值表达式访问:
- 与对象的有效类型兼容的类型。
首先,我认为 int 和 float 在大小方面是兼容的,因为 int 的大小等于 4 个字节,这与 float 的 thz 大小相同。
所以我想知道, int 和 float 关于什么不兼容?
谢谢你,对不起我的问题有点愚蠢:)
编辑:添加代码示例
#include <stdio.h>
void f(void) {
if (sizeof(int) == sizeof(float)) {
float f = 0.0f;
int *ip = (int *)&f;
(*ip)++;
printf("float is %f\n", f);
}
}
解决方案
“我认为 int 和 float 的大小是兼容的,因为 int 的大小等于 4 个字节,这对于 float 的 thz 大小是相同的。” 不符合“与对象的有效类型兼容的类型”。
所以我想知道, int 和 float 关于什么不兼容?
肯定有不一样的大小。即使尺寸相同,类型也可能在对齐需求上有所不同。对象的地址(不常见)int
甚至可能与float
. int *ip = (int *)&f;
可能导致未定义的行为。
为了最好地将整数数据重新解释为浮点数据,首先需要一个明确的用例。
推荐阅读
- gearman - 如何在 sakuli_gearman_proxy.cfg 中配置修改 sakuli 输出的规则?
- ios - CircleCI 2.0 iOS 构建卡在签名中
- php - (Cache::lock()) -> get() -- 在什么情况下它返回假?
- vba - 隐藏打印窗口
- python - 如何在python中为图像创建分割图
- django - uwsgi + nginx ...选项错误后错误
- ios - 如何从 WebRTC 获取当前图片作为图像?
- arrays - 为什么 argv 有效,但 lineptr 无效?(C中的指针和数组)
- node.js - 为什么运行反应脚本时找不到节点?
- javascript - 如何使用 MUI 自动完成、react-hook-form 和自定义钩子构建异步自动完成组件(React 和 TS)