我有一个名为 PointF
的类,它有一个采用 Point
的构造函数,我不断收到“可能丢失数据警告”。我如何证明我的意图实际上是将 float
值转换为 int
等?我尝试了 static_cast
和 (float)
但他们没有修复警告。
例如:
int curPos = ceil(float(newMouseY / font.getLineHeight())) ; //float to int
和
outputChars[0] = uc; //converting from size_t to char
最佳答案
类型转换应该可以解决问题;上面写着“明确地将这种类型变成那种类型”,这对于编译器发出警告通常是非常愚蠢的:
int curPos = static_cast<int>(ceil(float(newMouseY / font.getLineHeight())));
或者:
outputChars[0] = static_cast<char>(uc);
确保您尝试的转换与此类似。你说“我试过...(float)
”这让我相信你试过这样的事情:
int curPos = (float)(ceil(float(newMouseY / font.getLineHeight())));
什么都不做。表达式的类型已经是 float
,将其转换为相同的类型会怎样?您需要将其转换为目标类型。
请记住,通常要避免转换。在您的第一个片段中,转换是明智的,因为当您量化某些内容时,您必然需要删除信息。
但是你的第二个 Actor 不是。为什么 uc
首先是 size_t
?当 Actor 确实丢失信息时会发生什么?这真的是个好主意吗?
关于c++ - 正确修复转换和数据丢失警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115562/