16

enumPhobosが定数の定義に使用するのはなぜですか? たとえば、std.math では次のようになります。

enum real E = 2.7182818284590452354L;

グローバルを使用しないのはなぜimmutableですか? enum以上のメリット・デメリットはimmutable

4

2 に答える 2

22
  1. 列挙型は単なる右辺値であり、左辺値ではありません。住所はありません。
  2. 列挙型はコンパイル時定数のみであり、実行時定数ではありません。
  3. 列挙型は、オブジェクトファイルに肥大化を追加しません。
  4. 列挙型はコンパイルが速く、コンパイル時のメモリ使用量が少なくなります。通常はごくわずかですが、十分に複雑なメタプログラミングを行っている場合は、問題が発生する可能性があります。

一般に、実行時定数ではなくコンパイル時定数であるものの場合、列挙型を使用することに不利な点はなく、意図を完全に明確にし、わずかに効率を上げるという利点があります。

編集:列挙型のもう1つのユースケースは、関数を実行時に評価するかコンパイル時に評価するかをコンパイラーに明確にすることです。関数の結果がimmutableスタック変数に割り当てられている場合、関数は実行時に評価されます。同じスコープでを使用する場合enum、結果はコンパイル時に評価されます。

于 2010-09-02T00:18:04.147 に答える
4

D の IIRCは、Cenum A = B;の場合とほぼ同じ#define A Bです。それを使用する式では、常にリテラルとしてサブされます。

于 2010-09-02T00:47:35.003 に答える