5

我正在写作vector.go作为我程序的一部分。它提供了一个三维vector结构和一些向量操作。

为了与一般类型对称vector,我想提供一个scalar类型:

type scalar float64

我喜欢这样,因为我没有理由每次都指定标量的精度。它们是 64 位的事实是我宁愿只指定一次的细节。

唯一的问题是我知道这不像typedef在 C 中那样。幕后似乎还有更多的事情发生。我的问题:这会产生任何开销吗?如果是这样,时间和多少?当性能绝对关键时,我可以使用它吗?(假设我将替换每次出现的float64withscalar并转换文字,例如,scalar(1.0)。)

4

1 回答 1

11

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

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

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

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

是的

于 2013-07-09T06:15:33.150 回答