c++ - 正确修复转换和数据丢失警告?

标签 c++ casting compiler-warnings

我有一个名为 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/

相关文章:

r - R 中 cat 函数中回车符内的换行符

c++ - 为什么将有符号值分配给无符号整数时编译器不给出错误? - C++

ios - 为什么我在 Xcode 4.5 中没有收到任何编译器警告?

c++ - 为什么我可以编译有 2 个返回的代码?

c++ - 如何在 C++ 字符串中存储 CTRL-A (0x01)?

c++ - Clang 10 无法在 macOS 10.12 上将 C++ 应用程序与 CMake 链接

c++ - 传递参数以在 C++ 中 boost odeint

c++ - 使用 drawComplexControl 检索 QSliderHandle 图像

C - 将 char 数组转换为整数指针?

java - 单击按钮时如何在Java中的运行时强制转换对象