我有一个名为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
答案 0 :(得分:1)
演员应该做的事;这说“明确地将这种类型变成了那种类型”,这对编译器来说通常很愚蠢:
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
,将它转换为相同类型的是什么?您需要将其强制转换为目标类型。
请记住,通常应避免使用强制转换。在你的第一个片段中,演员是明智的,因为当你量化某些东西时,你一定需要丢弃信息。
但是你的第二次演员不是。为什么uc
首先是size_t
?当演员 删除信息时会发生什么?这真的是个好主意吗?
答案 1 :(得分:0)
您需要投放ceil
的结果,最好使用static_cast
。
答案 2 :(得分:0)
您可能必须使用明确的演员表,即
int curPos = int(ceil(...));
答案 3 :(得分:0)
您必须将变量转换为正常的改变她的类型。如果您尝试将size_t
转换为char
,那么您尝试将4 bytes
保存到1 byte
,以这种方式丢失数据是正常的。