なぜ、std::numeric_limits
C++ のテンプレート クラスではdigits
(およびその他) がクラスの (static const) フィールドとして定義されているのに、min()
およびmax()
がメソッドであるのですか。これらのメソッドはリテラル値を返すだけなので?
前もって感謝します。
なぜ、std::numeric_limits
C++ のテンプレート クラスではdigits
(およびその他) がクラスの (static const) フィールドとして定義されているのに、min()
およびmax()
がメソッドであるのですか。これらのメソッドはリテラル値を返すだけなので?
前もって感謝します。
クラス本体で非整数定数 (例: 浮動小数点) を初期化することはできません。C++11 では、宣言が次のように変更されました。
...
static constexpr T min() noexcept;
static constexpr T max() noexcept;
...
C++98 との互換性を維持するために、関数は保持されていると思います。
例:
struct X {
// Illegal in C++98 and C++11
// error: ‘constexpr’ needed for in-class initialization
// of static data member ‘const double X::a’
// of non-integral type
//static const double a = 0.1;
// C++11
static constexpr double b = 0.1;
};
int main () {
std::cout << X::b << std::endl;
return 0;
}