C++双指针数组到 float 的转换

标签 c++ c++11 type-conversion implicit-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必须是相同的值。

关于C++双指针数组到 float 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50682097/

相关文章:

c++ - 类中的静态常量

qt - QProgressBar 忙不工作

c++ - 不控制派生类的线程安全工厂模式

c++ - 计算文件中的 react 数

C++ Boost函数比较

c# - 嵌入式文件系统?

c++ - SFINAE 和 sizeof 与 constexpr

javascript - {} - 0 VS ({} - 0) 在 JavaScript 中

javascript - 类型转换在 JavaScript 中是如何发生的?

c - 如何在 C 中将数组转换为二维矩阵而不分配额外的内存?