필자는 내 자신의 형식을 어떤 비교 자도 사용하지 않고 전문화하지 않고 std::numeric_limits
을 만들었습니다. 그럼에도 불구하고, 어떤 이유로 든 std::numeric_limits<MyType>
은 정상적으로 컴파일됩니다. 왜 C++ 표준위원회는 numeric_limits
템플릿을 정의하여 비 숫자 형을 포함하여 모든 유형에 유효합니다. 아래C++ : numeric_limits가 모르는 유형에서 작동하는 이유는 무엇입니까?
예제 코드 :
#include <iostream>
#include <limits>
using namespace std;
// This is an int wrapper that defaults to 666 instead of 0
class A {
public:
int x;
public:
A() : x(666) {}
};
int main() {
A a = std::numeric_limits<A>::max();
A b = std::numeric_limits<A>::max();
std::cout << a.x << "\n" << b.x;
// your code goes here
return 0;
}
[그냥 몇 가지 관찰 (HTTP : //coliru.stacked- 그래서, 당신은 클래스 템플릿은 전문 여부에 대한 구성원의 액세스를 지키는 것이 가장 좋은 선택이 될 것입니다 (C++ 17을 사용) crooked.com/a/d9083caa1a24b93c). – user0042
'x'를 비공개로 설정하여 오류를 추가했습니다. 더 나은 예제를 원한다면'class A '를'class A {}'로 대체하고'std :: cout'을 삭제하십시오. 코드는 여전히 컴파일됩니다. 이유가 무엇입니까? – tohava
질문에 답을하십시오. 서면으로 "이게 어떻게 생겼어?"라고 묻습니다. 하지만 "왜 C++ 표준위원회가 numeric_limits 템플릿을 정의하여 숫자가 아닌 유형을 포함하여 모든 유형에 유효합니까?"라고 묻는 것 같습니다. –