gpt4 book ai didi

c++将隐式转换从double更改为int

转载 作者:行者123 更新时间:2023-11-30 01:42:05 25 4
gpt4 key购买 nike

我的代码有很多从 double 到 int 的转换。代码可以看成

double n = 5.78;
int d = n; // double implicitly converted to a int

从 double 到 int 的隐式转换是一个截断,这意味着 5.78 将被保存为 5 。但是,已决定通过自定义舍入来更改此行为。

解决此类问题的一种方法是拥有自己的 DOUBLE 和 INT 数据类型并使用转换运算符,但遗憾的是我的代码很大,不允许我做太多更改。我想到的另一种方法是在每个数字中添加 0.5,但可惜代码很大而且我改变了太多。

有什么简单的方法可以改变影响整个代码的 double 到 int 的转换行为。

最佳答案

您可以使用统一的初始化语法来禁止缩小转换:

double a;
int b{a}; // error

如果你不想这样,你可以使用 std::round函数(或其姊妹函数 std::ceil/std::floor/std::trunc):

int b = std::round(a);

如果你想要最小的差异变化,你可以这样做。不过请注意,这是一个糟糕的解决方案(如果可以这样命名的话),并且比实际解决问题更有可能让您因未定义的行为而崩溃和烧毁真正的问题。

定义您的自定义 Int 类型,以您希望的方式处理转换:

class MyInt
{
//...
};

然后在预处理器黑魔法的帮助下,用 MyInt 邪恶地替换每次出现的 int:

#define int MyInt

问题:

  • 如果您不小心更改了标准库中的定义 - 您就在 UB 领域
  • 如果您更改 main 的返回类型 - 您处于 UB 领域
  • 如果您更改了函数的定义但未更改它的前向声明 - 您将进入 UB/链接器错误区域。或者在静静地呼唤不同的重载之地。
  • 可能更多。

关于c++将隐式转换从double更改为int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40161094/

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