Ano*_*ous 5 c++ floating-point casting char
有人可以解释一下如何float铸造uint32_t作品吗?这是有效的转换吗?
下面代码中第一行的输出对我来说有意义,但其余的我自己无法弄清楚。
\ncout<<uint8_t(256+33)<<'\\n';\ncout<<uint8_t(float(256+33))<<'\\n';\ncout<<int(uint8_t(float(256+33)))<<'\\n';\ncout<<int(uint8_t(float(256+3)))<<'\\n';\ncout<<int(uint8_t(float(256+20)))<<'\\n';\nRun Code Online (Sandbox Code Playgroud)\n输出
\n!\n\xef\xbf\xbd\n255\n255\n255\nRun Code Online (Sandbox Code Playgroud)\nuint8_t(256+33)是 int 到 unsigned char,它给出!,这正是我所期望的。然而,float根本uint8_t不起作用。当我尝试将输出转换为 int 时,它给了我常量 number 255。
我有一个vector<float>并想将其转换为vector<uint8_t>,它将传递到一个函数中。float转换为什么是有效的方法uint8_t?会static_cast<uint8_t>起作用吗?我应该先转换float为int然后再转换int为uint8_t吗?
它们无效,但未定义。
在 C++17 中:
4.10 浮点积分转换 [conv.fpint]
浮点类型的纯右值可以转换为整数类型的纯右值。转换截断;也就是说,小数部分被丢弃。如果截断值无法在目标类型中表示,则行为未定义。
转换int是明确定义的,您不能仅仅因为结果对您有意义就假设它:
4.8 积分转换 [conv.integral],第 2 项
如果目标类型是无符号的,则结果值是与源整数一致的最小无符号整数(模 2 n,其中 n 是用于表示无符号类型的位数)。