1

basic_string クラスには、静的 const として宣言された npos があります。C++ 11以降、静的constとして宣言する理由、次のように単純ではない理由:

class basic_string{ 
  ................................

 enum: size_type { npos = static_cast<size_type>(-1) };
.........................>
};

???

static const と enum のどちらが良いですか?

4

2 に答える 2

2

そうしないのには十分な理由があります。列挙は、オーバーロードの解決時またはテンプレートのインスタンス化時に少なくとも変更を引き起こす新しい型を作成します。

とはいえ、クラス定義でクラス静的定数を実際に宣言および定義できると思いますか、それともクラスがテンプレートである場合、その規則の例外はありますか?

于 2013-07-09T12:41:23.927 に答える
0

2 つのソリューションはほとんど同じです。いわゆる列挙ハックは、主にクラスの初期化をサポートしていないコンパイラのために生まれました。違いは次のとおりです。列挙型「変数」のアドレスを取得することはできません。static const アプローチはタイプセーフです。現在、C++11 の enum クラスは確かにタイプ セーフです (ただし、enum に固執する場合を除きます)。

基本的に、唯一の違いは「アドレス」の問題です。ただし、enum クラスを定義すると、型が定義されます。必要なものが定数であるときに型を定義するのは見栄えが悪いと思うかもしれません。

于 2013-07-09T12:44:57.837 に答える