You need to enable JavaScript to run this app. Dart可重载的运算符有哪些?重载一元--运算符VSCode报红如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

Dart可重载的运算符有哪些?重载一元--运算符VSCode报红如何解决?

Dart 运算符重载相关问题解答

报错核心原因

你写的operator --定义触发编辑器红色报错,完全是符合Dart语法规则的表现:Dart 从设计层面就不支持重载--(自减)、++(自增)这两类前后缀一元运算符。这类操作在Dart中本质是编译器实现的语法糖,并非独立的可重载运算符实体,对应的自定义语法从根上就不被允许,哪怕添加@override注解也无法绕开静态语法校验,自然会持续报红。
你之前在代码里实现的无参operator -()、有参operator +都在官方允许的重载范围内,因此不会触发报错。

官方可重载运算符完整清单

Dart 语言规范中对可自定义重载的运算符有明确固定的列表,没有模糊地带,具体包含以下类别:

  • 二元算术运算符:+、-、*、/、~/(整除)、%(取模)
  • 一元前缀运算符:-(数值取反)、~(按位取反)、!(逻辑取反)
  • 关系比较运算符:==、<、>、<=、>=
  • 位运算运算符:&、|、^、<<、>>、>>>(无符号右移)
  • 下标访问运算符:[](索引读取)、[]=(索引赋值)

补充说明:你代码中写的无参operator +()(即一元正号运算符)其实并不在可重载列表内。一元+在Dart中是无实际运算语义的内置运算符,所有类型调用它都会直接返回自身,自定义实现没有任何实际作用。

替代实现方案

如果确实需要给Point类实现坐标自减1的逻辑,不需要强行套用--的重载语法,直接定义普通实例方法实现即可,比如:

// 替换原错误的operator -- 实现
Point decrement() {
  _x -= 1;
  _y -= 1;
  return this;
}

内容的提问来源于stack exchange,提问作者Display Name

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 21:15:09