为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中“别名”类型的开销

Go 中“别名”类型的开销

Go
三国纷争 2021-06-11 18:02:17
我正在写作vector.go作为我程序的一部分。它提供了一个三维vector结构体和一些向量操作。为了与一般vector类型对称,我想提供一个scalar类型:type scalar float64我喜欢这个,因为我没有理由每次都指定标量的精度。它们是 64 位的这一事实是一个我宁愿只指定一次的细节。唯一的问题是我知道这不像typedef在 C 中那样。在幕后似乎还有更多事情要做。我的问题:这会产生任何开销吗?如果有,什么时候,多少?当性能绝对至关重要时,我可以使用它吗?(假设我将替换所有出现的float64withscalar并转换文字,例如,scalar(1.0)。)
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

首先,不需要转换文字。x = 1.0x = scalar(1.0)假设 x 已经具有类型标量相同。

在 Go 中,没有用户定义的类型别名这样的东西。在 Go 中,byte 和 uint8(它们是内置类型)被认为是彼此的别名。它们是同一类型的两个名称。Float64 和标量不是同一种类型。float64 和 scalar 的值需要使用诸如s = scalar(f)而 byte 和 uint8 之类的东西相互转换。

但是,此类转换没有开销。这些类型在编译时强制执行以确保代码正确性,但不会影响执行期间的性能。仅当您输入断言或使用反射时,执行才会受到影响。但是,这些差异会影响逻辑,而不是性能。

当性能绝对至关重要时,我可以使用它吗?

是的


查看完整回答
反对 回复 2021-06-21
  • 1 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信