You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dart中使用带常量构造函数的类创建对象时为何要显式加const?

问题解答

Dart并不会自动将const构造函数的调用默认生成常量实例,具体规则和原因如下:

  • 核心规则:const是需要显式声明的修饰符(仅在强制要求常量的上下文中会隐式生效)
    SizedBox的构造函数确实是const类型,但你直接写SizedBox()时,默认生成的是普通运行时实例,等价于省略了new关键字的new SizedBox()。只有当这个实例处在必须传入常量的上下文中时,才会隐式转为常量,比如你把它放在const <Widget>[]数组里、或者作为const变量的初始化值时,不需要手动写const也会按常量处理。
  • 显式加const的作用:
    编译期就会创建唯一的常量实例,整个程序运行过程中所有同参数的const SizedBox()都会指向同一块内存地址,不会重复创建对象,既减少内存占用,也能降低GC压力。你可以通过下面的代码验证差异:
    void main() {
      var a = SizedBox();
      var b = SizedBox();
      print(a == b); // 输出 false,两个独立的运行时实例
    
      var c = const SizedBox();
      var d = const SizedBox();
      print(c == d); // 输出 true,同一个常量实例
    }
    
  • 编辑器的提示来自Dart官方的prefer_const_constructors lint规则,目的就是提醒开发者在可以使用常量的场景主动声明,最大化利用const的性能优势。

内容的提问来源于stack exchange,提问作者Hannes Hultergård

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:09:01