Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;VS工具集141-142铸件的差异_C++_Casting - Fatal编程技术网

C++ C++;VS工具集141-142铸件的差异

C++ C++;VS工具集141-142铸件的差异,c++,casting,C++,Casting,实际上,我正在编写一个使用c样式转换的旧源代码 在该代码中,我们将一些双精度值转换为无符号long。当使用VS2017工具集v141编译代码时,转换是正确的 但是现在,我们正在迁移到VS2019工具集v142,而强制转换失败了。它返回0xFFFFFF v142中是否有影响演员阵容的变化? 如果是,是否有一个选项或任何技巧,我可以做有正确的价值 例如: #include <iostream> #include <limits> typedef std::numeric_l

实际上,我正在编写一个使用c样式转换的旧源代码

在该代码中,我们将一些双精度值转换为无符号long。当使用VS2017工具集v141编译代码时,转换是正确的

但是现在,我们正在迁移到VS2019工具集v142,而强制转换失败了。它返回0xFFFFFF

v142中是否有影响演员阵容的变化? 如果是,是否有一个选项或任何技巧,我可以做有正确的价值

例如:

#include <iostream>
#include <limits>

typedef std::numeric_limits< double > dbl;

int main()
{
    double value = -699457.70832337427;
    unsigned long ulValue = (unsigned long)value;
    unsigned long sculValue = static_cast<unsigned long>(value);

    std::cout.precision(dbl::max_digits10);

    std::cout << "Value : " << value << " - C-Style Cast " << ulValue << " - Static Cast " << sculValue << "\n";
    std::cout << "Value : " << value << " - C-Style Cast " << std::hex << ulValue << std::hex << " - Static Cast " << sculValue << "\n";
}
#包括
#包括
typedef std::数值_限制dbl;
int main()
{
双值=-699457.70832337427;
无符号长ulValue=(无符号长)值;
无符号长循环值=静态_转换(值);
标准::计算精度(dbl::最大数字10);
标准::cout
浮点整数转换[conv.fpint]

浮点类型的prvalue可以转换为整数类型的prvalue。转换会截断;也就是说,小数部分将被丢弃。如果目标类型中无法表示截断的值,则行为未定义


正如已经指出的,将负浮点值转换为无符号整数类型是未定义的行为

目前我发现的唯一技巧是先将值强制转换为long,然后将值强制转换为unsignedlong,但这并不是一个理想的解决方案


是的,这有点麻烦;但这是实现定义良好的行为(在本例中实际上是实现定义的行为)的唯一方法.

您正在对unsigned long强制转换负的双精度值?这有意义吗?无法重现此问题。使用v142工具集生成的结果与V141中列出的结果相同。我看到了Ok的可能副本。依赖未定义行为的未知意图代码在许多计算机上运行,我们正忙于让它继续运行快跑。我相信我们的未来掌握在好的手中。我们在谈论什么样的机器?找一个朋友。该死,这不是我一直在等待的答案,但我现在知道我必须做什么了!谢谢大家!