【问题标题】:How to get rid of the warning: Implicit conversion shortens 64-bit value into a 32-bit value如何摆脱警告:隐式转换将 64 位值缩短为 32 位值
【发布时间】:2013-05-26 14:06:55
【问题描述】:

首先,我是 C++ 初学者,我使用的是 Xcode 4.6.2。编译器配置是默认的。我只将编译器切换到 gcc 4.2。 如果我编译我的小代码,我会收到以下警告:

隐式转换将 64 位值缩短为 32 位值 隐式转换丢失整数精度:'unsigned long' 到 'unsigned int'

这是触发警告的代码:

median = temps[temps.size()/2];

提示: temps 是 double 的向量,median 是 double

我必须做些什么来摆脱这些警告?是否可以通过编译器配置来处理这个问题(我不是说禁用警告;-))还是我必须更改我的代码?

【问题讨论】:

  • 该警告对您发布的行没有意义。尝试显示警告,包括 Xcode 突出显示的确切范围。

标签: c++ xcode 32bit-64bit compiler-warnings implicit-conversion


【解决方案1】:

temps.size() 返回(据我所知)一个无符号长整数,但 2 是一个(无符号)整数。

试试

temps[(unsigned long)temps.size()/(unsigned long)2]

temps[(unsigned long)((unsigned long)temps.size()/(unsigned long)2)]

【讨论】:

  • 我不确定这是否正确,因为2 将被提升为无符号长整数。我认为错误是 next 步骤,其中operator[] 期待int 而不是unsigned long
  • @MooingDuck 或者可能是那个,我想过,但就像“不”之类的东西......,我们将看看 OP 的反馈会是什么。有一个负索引是不合逻辑的:o
  • 我们已经有反馈:“失去整数精度:'unsigned long' 到 'unsigned int'”
【解决方案2】:

在项目设置下,转到“LLVM GCC 4.2 - 警告”部分或适合您的编译器的部分,然后选择“禁止所有警告”

【讨论】:

  • 你肯定想要警告!当发生不正确或(可能)不是您期望的事情时,他们会通知您。
【解决方案3】:

不,我在使用上述编译器“Apple LLVM Compiler 4.2”的 X-CODE 中遇到了同样的问题,并且通过使用“unsigned long int”而不是“int”数据类型得到了解决......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-28
    • 2015-12-31
    • 2021-01-22
    • 2014-09-11
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多