【问题标题】:compiler warning about implicit conversion from int to double关于从 int 到 double 的隐式转换的编译器警告
【发布时间】:2011-12-30 01:57:07
【问题描述】:

有没有什么方法可以为int到double转换启用编译器警告,即double value = 2;

这可能看起来过于严格,但我相信在某些情况下,比如数学软件,这样的限制可能是可以接受的,可以在编译时捕获一些错误。

目标编译器是 gcc/clang。

关于 double -> int 转换有很多问题,反之亦然,我没有找到任何有用的信息。

【问题讨论】:

  • 如果你需要一个双精度,你就需要一个双精度,不管这个双精度是否可以精确表示。
  • 如果强类型很重要 - 选择强类型语言。这里没有数据丢失,为什么编译器会警告你?
  • GCC (4.6.1) 使用--help=warnings 列出此选项:-Wconversion-extra 警告大多数隐式转换。但是,当我尝试它时,它说:cc1: warning: command line option ‘-Wconversion-extra’ is valid for Fortran but not for C [enabled by default]
  • @littleadv 性能原因和历史原因也存在,因此应该使用 C++
  • 您是否希望仅在可能丢失信息的情况下才发出警告? (例如,当 intdouble 都是 64 位时,这将适用。)或者您是否想要任何 int-to-double 转换的警告?如果是后者,为什么;您希望它能够捕获哪些错误?

标签: c++


【解决方案1】:

警告消息取决于编译器,启用或禁用它们的编译器选项尤其如此。不知道你用的是什么编译器,这是不可能的。

不过,一般来说,大多数编译器只提供有损转换的警告,int -> double 在我使用的所有平台上都是完美的无损转换。

【讨论】:

  • 当您的 64 位 int 大于 double 的尾数可以表示的值时,int to double 是否会丢失精度?
  • @user1118321 如果int 是 64 位,则转换可能会丢失精度。但在 C++ 中,int 宽于 32 位的平台目前非常罕见。
  • 我更新了问题,提到编译器是 gcc/clang
猜你喜欢
  • 2020-01-04
  • 2023-03-06
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
  • 1970-01-01
相关资源
最近更新 更多