Swift 的移位整数参数的双初始化器的类型推断问题

Type inference issue with Swift's Double initializer for shifted integer parameters

我正在尝试使用整数位移操作的结果来初始化 Float 或 Double。传递的参数是一个整数文字,由一个无符号字节移位。据我了解 Swift 的类型推断,该参数应该是 Int 类型。但是,生成的浮点值是 0.0。奇怪的是,我将参数表达式放在括号中后问题就消失了。

let someByte = UInt8(16)

print(Double(1 << someByte)) //Prints "0.0" ?!
print(Double((1 << someByte))) //Prints "65536.0"

这看起来像是编译器中的错误。正如@Hamish 所说,最新的大师解决了这个问题,我可以确认,因为我安装了 Swift 4.2 和 Swift 5.0 的工具链:

  • 使用 Swift 4.2 工具链,行为如您所述:第一个打印输出 0.0,而第二个输出 65536.0
  • 而如果使用最新的 Swift 5.0 工具链,则两个调用都会打印 65536.0