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

Won*_*lMe 1 c++ type-conversion implicit-conversion c++11

在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;
Run Code Online (Sandbox Code Playgroud)

哪一个现在正确?

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

提前致谢!

Bat*_*eba 6

它们都归结为同样的事情,数组的使用是一个红色的鲱鱼.你确实可以写

float f = d;
Run Code Online (Sandbox Code Playgroud)

一些人认为,static_cast使代码更具可读性,因为它非常清晰.如果使用不太冗长的形式,它也可以打败某些编译器可能会发出的警告.

当然,因为a double是超集float,你可能会失去精确度.最后,请注意

float f1 = whatever;
double d1 = f1;
float f2 = d1;
Run Code Online (Sandbox Code Playgroud)

,C++标准坚持认为f1并且f2必须是相同的值.