运算符重载有什么实际用途?感觉很鸡肋

12 天前
 seekseat

看到很多人在讨论...但这玩意有啥作用,工作这么多年完全没 get 到

4665 次点击
所在节点    Go 编程语言
53 条回复
009694
12 天前
@ty29022 你这种想法极其傲慢。。 键盘上半角符号就这么几个 照你这说法全都只能用于原始的数学含义 那还真出什么运算符重载 全都只支持基础类型就行了
nagisaushio
12 天前
@ty29022 @Sawyerhou 有种给 iostream 左右移的美感(开玩笑)
y1y1
12 天前
确实当初下了好大的功夫
wkla
12 天前
在 C++里,比如你写个类,重载一下移位运算符,就可以用左移右移来做输入输出 << >>

C++ 的 filesystem 标准库,也可以用 / 运算符来算路径。比如 std::filesystem::path outputPath = std::filesystem::path("parent_dir") / relativePath;

你写一套矩阵库,别人想用起来要是可以直接用 + - * / ,直接 << 输出,可能学习成本就低一点,别人会爽一点。

虽然我确实觉得主要是用来耍帅🤣
f0rb
12 天前
那路径里面 windows 的\怎么处理呢,只在 linux 上开发?
aliipay
12 天前
@009694 说实在的,这就是 shit🕳,连标点都没有
adoal
12 天前
@ty29022 运维人表示 / 显然是路径分割符……话说回来,数学课本里除法写一行用除号 ÷ ,写多行用分数线,斜线并不是主流啊。
agagega
11 天前
严格一点说,大部分语言的运算符即使不支持用户重载,也是已经重载过的了。比如加法 + 严格来说对整数和浮点数是完全不一样的两种操作,像 OCaml 就会区分整数的 + 和浮点数的 +.

所以严格纠结所谓数学上的含义没有意义……
inframe
11 天前
@ty29022 #11 有点教条主义,从实用主义的角度出发工具的发明应该是提高生产效率的,
“黑猫白猫不管什么猫,能让开发人员更加快速的完成开发任务就是好猫”
whusnoopy
11 天前
比如我定义了一个向量类型 P ,有 x/y 两个坐标,向量可以加一个向量到新的位置,就是 p3(x3, y3) = (x1+x2, y1+y2), 如果支持运算符重载,在向量类型定义里我重载掉加法,这样我就只要写 p3 = p1 + p2 就行,而不用写 p3.x = p1.x + p2.x ,p3.y = p1.y + p2.y
p1gd0g
11 天前
说白了还是看业务,总没必要硬着头皮用吧?
mightybruce
11 天前
这个是语言哲学语言设计的范畴,无所谓好坏,支持运算符重载能找到一堆理由,不支持运算符重载的也有一堆理由。

新语言如 rust 也有通过 trait 来支持运算符重载的
liuminghao233
11 天前
10 个矩阵相乘,你用 golang 写一下吧
GeekGao
11 天前
高级抽象:除 1 楼提到的 DSL 外,还有场景,例如 ORM
butanediol2d
11 天前


情绪化日志( doge
default996
11 天前
@butanediol2d 哈哈,为什么不把表情符号也追加到日志中
wanguorui123
11 天前
C# 里面运算符重载可以实现+注册和-移除方法实现更直观的订阅机制
Biem
11 天前
@ty29022 读出来是除法只能说明一件事,那就是命名不规范不能体现变量或者函数的实际意义。
Kauruus
11 天前
你用过 Go 的 math/big (或者其他 decimal 包)就知道了,他们的加减乘除是这样的:

```
func (z *Int) Add(x, y *Int) *Int
func (z *Int) Sub(x, y *Int) *Int
func (z *Int) Mul(x, y *Int) *Int
func (z *Int) Quo(x, y *Int) *Int
```

本来一行就能写完公式,你用上面的 API 要不断搞中间变量,硬是写成十几二十行,每次写点复杂的计算公式或者 code review ,我就头大,非常想要运算符重载。
sazima
11 天前
比如这个, 运算符就重载了,sesseion.User.filter(User.name == User.nickname | User.age < 15 )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1070965

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX