2013-10-31 3 views
11

C++의 템플릿 클래스 std::numeric_limits에서 digits (및 기타)은 클래스의 (정적 const) 필드로 정의되어 있지만 min()max()은 메서드입니다. 이 방법은 단지 litteral 값을 반환합니까?C++ 클래스의 필드와 메서드 std :: numeric_limits

미리 감사드립니다.

+2

나는 항상 특히'constexpr' 하나의 모양 따라서 템플릿 매개 변수에'분()'와'최대()'사용하지 전에 때문에, 그 자신 궁금했습니다! –

답변

6

클래스 본문에서 정수가 아닌 상수 (예 : 부동 소수점)를 초기화 할 수 없습니다. C++ 11 선언에서 이 기능이 유지되는 C++ 98의 호환성을 유지하려면

... 
static constexpr T min() noexcept; 
static constexpr T max() noexcept; 
... 

로 변경, 나는 생각한다.

예 :

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; 
} 
+1

"정수가 아닌 정수 (예 : 부동 소수점)를 선언 할 수 없습니다"라는 것은 무엇을 의미합니까? –

+1

C++ 03에서는 정수 본문 만 클래스 본문 내에 정의 할 수 있습니다. 클래스 본체 밖에서 부동 소수점 상수를 정의하지 못하게하는 것은 없습니다. – Simple

+0

@ 단순 해명 해 주셔서 감사합니다. –