2

重複の可能性:
なぜ std::numeric_limits<T>::max() は関数なのですか?

なぜnumeric_limits<T>::has_infinityconst 値であり、numeric_limits<T>::infinityそうでないのですか? なぜnumeric_limits<T>::infinity関数を作るのですか?

4

1 に答える 1

4

floatdoubleまたはUDT static const値などはクラスで初期化できず、外部定義が必要なためです。簡単に言えば、メモリの場所が必要ですが、静的 const 整数値は必要ありません (それらへのポインター/参照が取得されない限り)。

C++11 では、これらの関数は宣言する必要がありconstexprます。これにより、定数ではなく関数であるという事実から見られる欠点が解消されます。

于 2012-12-29T03:30:50.163 に答える