繁体   English   中英

C ++双指针数组进行浮点转换

[英]C++ double pointer array to float conversion

在c ++中将double转换为float的正确方法是什么。 转换是隐式的吗?

问题1:考虑double d = 5.0; float f;

哪一个是正确的?

  • f = d;
  • f = (float)d;
  • f = static_cast<float>(d);

问题2:现在考虑

char *buffer = readAllBuffer(); 
double *d = (double*)(buffer + offset);
float f;

现在哪一个是正确的?

  • f = d[0];
  • f = (float)d[0];
  • f = static_cast<float>(d[0]);

提前致谢!

他们全都归结为同一件事,而使用数组是一个红鲱鱼。 你确实可以写

float f = d;

一些人认为, static_cast突出之处在于使代码更具可读性。 如果使用的格式不那么冗长,它也可以消除某些编译器可能发出的警告。

当然,由于doublefloat的超集,因此您可能会失去精度。 最后,请注意

float f1 = whatever;
double d1 = f1;
float f2 = d1;

,C ++标准坚持认为f1f2必须具有相同的值。

您确实有一个主要问题。 这是不允许的:

double *d = (double*)(buffer + offset);

它违反了严格的混叠和可能的对齐要求。 相反,您需要使用memcpy

double d;
memcpy(&d, buffer + offset, sizeof d);
float f = d;

可以使用任何一种强制转换选项替代最后一行,重要的变化是从取消引用类型和对齐方式不正确的指针到进行字节复制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM