12

なぜ、std::numeric_limitsC++ のテンプレート クラスではdigits(およびその他) がクラスの (static const) フィールドとして定義されているのに、min()およびmax()がメソッドであるのですか。これらのメソッドはリテラル値を返すだけなので?

前もって感謝します。

4

1 に答える 1

7

クラス本体で非整数定数 (例: 浮動小数点) を初期化することはできません。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;
}
于 2013-10-31T14:48:46.063 に答える