5

私はvector.go自分のプログラムの一部として書いています。3 次元のvector構造体といくつかのベクトル操作を提供します。

一般的な型との対称性のvectorために、型を提供したいと思いますscalar:

type scalar float64

毎回スカラーの精度を指定しなければならない理由がないので、私はこれが好きです。それらが 64 ビットであるという事実は、一度だけ指定したい詳細です。

唯一の問題は、これがtypedefC のようではないことを私が知っていることです。私の質問:これによりオーバーヘッドが発生しますか? もしそうなら、いつ、どのくらいですか?パフォーマンスが絶対的に重要な場合にこれを使用できますか? float64(すべての出現箇所をwithに置き換え、リテラルを変換すると仮定します。scalarたとえば、scalar(1.0).)

4

1 に答える 1

11

まず、リテラルを変換する必要はありません。x がすでにスカラー型であると仮定x = 1.0するのと同じです。x = scalar(1.0)

Go には、ユーザー定義の型エイリアスのようなものはありません。Go では、byte と uint8 (組み込み型) は互いのエイリアスと見なされます。これらは同じタイプの 2 つの名前です。Float64 とスカラーは同じ型ではありません。s = scalar(f)float64 とスカラーの値は、byte と uint8のようなものを使用して相互に変換する必要があります。

ただし、このような変換にはオーバーヘッドがありません。型は、コードの正確さのためにコンパイル時に適用されますが、実行中のパフォーマンスには影響しません。実行は、型アサーションを行うか、リフレクションを使用する場合にのみ影響を受けます。ただし、これらの違いはパフォーマンスではなくロジックに影響します。

パフォーマンスが絶対的に重要な場合にこれを使用できますか?

はい

于 2013-07-09T06:15:33.150 に答える