double on dart/flutter 自动转换的含义

Implications of automatic casting with double on dart/flutter

如果需要 double,使用 int 有什么影响? dart 允许你在没有 .0 的情况下声明一个 double 如果它是 0 并将其作为一个 double 处理而不需要任何类型的运行时转换?

让我担心的是:

查看示例:

完整版

SizedBox(height: 10)

# Or 
final double a = 2;

双版

SizedBox(height: 10.0)

# Or 
final double a = 2.0;

如果您查看 SizedBox 实现,您会发现字段高度的类型为双精度。

要了解您作为示例的代码中发生的情况,您必须了解类型推断的工作原理。在您提供的第一个代码示例(int 版本)中,即使您写的是 10 而不是 10.0,Dart 编译器也会将该值推断为双精度值,因为字段高度属于该类型。您没有明确指定作为参数提供的值是 int,因此它被视为双精度值。如果你给一个整数作为值(你指定了 int 类型),你将遇到下一个编译时错误:

因此,总而言之,在您的两个示例中,Dart 都将类型推断为 double,因为您没有明确说明这是一个整数。

您可以在此处阅读有关 Dart 类型推断的更多信息:https://dart.dev/guides/language/type-system#type-inference

intdouble 之间没有自动运行时转换。 double a = 2; 只是 double a = 2.0; 的语法糖,它发生在编译时,这就是为什么它只适用于整数文字。