関数内で使用する整数定数を定義する典型的な方法は次のとおりC++コードで単一の定数を定義するためにenumを使用する理由はありますか?
const int NumbeOfElements = 10;
クラス内で使用するための同じ:
class Class {
...
static const int NumberOfElements = 10;
};
次いでこれを固定サイズのアレイとして使用することができますこれはコンパイル時に知られていることを意味します。
昔のコンパイラは、後者の構文をサポートしていませんでしたし、列挙型を使用した理由です:
enum NumberOfElementsEnum { NumberOfElements = 10; }
今const int
関数でと、クラスstatic const int
構文の両方サポートするほとんどすべての広く使われているコンパイラでありますこの目的のためにenumを使用する何らかの理由がありますか?
うん、gccは-pedantic -Wall -Wextraを使ってもこれについて文句を言わない。とにかくリンク時までエラーを検出することはできないので、この種の移植性のないコードを診断しようとするのはあきらめるだけです –
良い答え。あなたが明示的に言及していないもう一つの素晴らしいことは、列挙型はrvalueであり、ストレージはこれまで割り当てられていないということです。テンプレートのメタプログラミングや多数のクラステンプレートのインスタンス化を行っている場合、コンパイラの最適化に頼るのではなく、確実に*を知っている方がいいかもしれません。 – jalf
クラスの外側に '静的const int 'の定義がない場合、そのために割り当てられた記憶域はありません。また、右辺値には記憶域を割り当てることができます(たとえば、一時変数は右辺値ですが、記憶域を使用します)。 –