이 질문은 다소 간단한 코딩을 수행하는 동안 다음과 같이 고려해야합니다. 예상대로C++ 11, 정수 유형은 범위로 결정됩니까?
for(unsigned int x=0x00000000; x<0xFFFFFFFF; x++)
{
// ...
}
위의 코드, 가정 작품 '를 sizeof 연산자를 (부호없는 int)를> = 4'우리가 아는 한, 그러나, 일부 플랫폼에서이 사실이 될 수 없습니다, 따라서 나는 모두이 일에 interrested 해요; 'RangeInt'는 템플릿이 '타입'는 최대 MINIMUM (0x00000000의()을 0xFFFFFFFF)에서 값의 범위를 유지하기에 충분히 큰 최소 정수 타입이다
for(RangeBasedInt<0x00000000, 0xFFFFFFFF>::type x=0x00000000; x<0xFFFFFFFF; x++)
{
// ...
}
;
template<int MINIMUM, int MAXIMUM>
struct RangeBasedInt
{
// Type based upon MINIMUM and MAXIMUM
typedef /* MAGIC */ type;
};
질문은 간단합니다.
- 표준 라이브러리의 어딘가에 구현되어 있습니까?
- 되지 않은 경우,이를 구현하는 라이브러리가있다, 또는 나는이 자신을 구현하기 정말 쉽게 내 자신의 표준에 따라 :: numeric_limits
하한값이 (또는 둘 다) 음수이면 어떻게 처리 할 수 있습니까? – Skeen
그러면 'RangeBasedInt'의 구현이 더욱 복잡해집니다. :-) 그러나 그것은 단지 당신이 그것을 만들고 싶어 복잡하게됩니다. 한도가 음수로 표현 되었다면, 리터럴 (iterate)이라고 가정하고 (그것을 리터럴이라고 가정) 여전히 'decltype'할 수 있고 그것을 나타낼 부호있는 정수 타입을 얻을 수 있습니다. 정말로 일반적인 'RangeBasedInt'을 만들고 싶다면 그렇게 할 수 있습니다. 표준 라이브러리에는 존재하지 않습니다. 그리고 decltype 많은 도움이 될 것입니다. –
나는 틀렸다면, 2.14.2, 당신이 말하는 것을 진술하고, 참조로 나를 바로 잡는다.GCC와 Clang 모두 한계 (0x0, 0xFF)에 대해 int를 생성하는 것처럼 보입니다. 여기서 unsigned char은 가장 작은 유형입니다. (컴파일러의 불완전 함이있을 수 있음) – Skeen