gpt4 book ai didi

C++ VS 工具集 141 - 142 转换的差异

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:01:55 25 4
gpt4 key购买 nike

我实际上正在处理使用 C 风格转换的旧源代码。

在该代码中,我们将一些 double 值转换为 unsigned long。使用 VS2017 工具集 v141 编译代码时,转换正确完成。

但是现在,我们正在迁移到 VS2019 工具集 v142,并且转换失败。它返回 0xffffffff !

v142​​ 是否有影响 Actor 阵容的变化?如果是,是否有一个选项或任何技巧可以让我获得正确的值?

例如:

#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";
}

使用 vs2017 和工具集 v141,输出为: 值:-699457.70832337427 - C 型转换 4294267839 - 静态转换 4294267839 值:-699457.70832337427 - C 风格转换 fff553bf - 静态转换 fff553bf

使用 vs2019 和工具集 v142,输出为: 值:-699457.70832337427 - C 型转换 4294967295 - 静态转换 4294967295 值:-699457.70832337427 - C 风格转换 ffffffff - 静态转换 ffffffff

我现在发现的唯一技巧是先将值转换为 long,然后再转换为 unsigned long,但这并不是一个理想的解决方案!

提前致谢!

最佳答案

Floating-integral conversions [conv.fpint]

A prvalue of a floating-point type can be converted to a prvalue of an integer type. The conversion truncates; that is, the fractional part is discarded. The behavior is undefined if the truncated value cannot be represented in the destination type.

关于C++ VS 工具集 141 - 142 转换的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58215838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com