flutter - Dart 编译器是否能够推断出 const 构造函数的用法?

标签 flutter dart constants compiler-optimization inference

我认为 dart 将使用 const 构造函数,如果它能够自动执行的话,为了解释这个假设让我们假设我们有一个已经有 const 的小部件构造函数 像:

class Retry extends StatelessWidget {
  const Retry();
}

然后因为 dart “能够推断出 const 用法”,接下来的两个代码都将意味着并编译成相同的代码:

1.

Container(
   child: Retry()
)
Container(
   child: const Retry()
)

是否假设 dart 可以推断他必须对声明了该选项的类使用 const 构造函数?或者不是? 我怎样才能证实它?

最佳答案

不,Dart 编译器不会推断 const除非句法上下文需要常量,例如如果你写 const [A()]那把 A()进入 const 上下文,这意味着 const [A()]const [const A()]相同,几乎没有其他地方也适用(例如元数据 @A())。

一般来说,Dart 编译器无法推断出 const在语言规范要求它这样做的地方之外,因为它可能会改变程序的语义。考虑:

class A {
  const A();
}

final Set<A> s = <A>{};
void foo(A a) {
  s.add(a);
}

void main() {
  foo(A());
  foo(A());
  print(s.length);
}

如果编译器只是四处放置 const在构造函数调用时,该程序将打印 1 , 但是它应该打印 2 .

关于flutter - Dart 编译器是否能够推断出 const 构造函数的用法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66215297/

相关文章:

dart - 隔离代码未按预期工作

flutter - Flutter Web TextField不显示键盘上写的文本

c++ - 从 DLL 导出常量

android - Flutter - 如何在复选框动态列表中设置复选框小部件的状态

flutter - Flutter ListView/ListTiles没有呈现在页面上

dart - 不要在撕下时创建 lambda

c++ - 将类对象数组作为 const 传递给函数,以防止对类对象进行任何修改

php - 覆盖类常量与属性

Flutter 设置状态不会用新数据更新我的 UI

勾选框上的 flutter 圆角