2014-09-15 2 views
0

인터페이스로 작동하는 일련의 순수 가상 클래스를 작성하고 있습니다. 이러한 인터페이스를 구현하는 코드는 다른 빌드 구성, 컴파일러 또는 다른 STL 구현을 사용하여 이러한 인터페이스를 통해 이러한 객체를 사용하도록 코드를 작성할 수 있다는 아이디어가 있습니다.표준 크기의 일관성 :: size_t

uint32_t과 같은 일반 데이터는 doublefloat과 같이 표준화되어 있습니다. (bool은 규격에 크기가 명시되어 있지 않으므로 해당되지 않습니다.)

std::size_t은 어떤 카테고리로 분류됩니까? 순수하게 기계 아키텍처의 기능입니까? 예를 들어, 32 비트 시스템에서 sizeof(std::size_t)이 4가 아닌 경우?

+6

표준에는'double'과'float'의 크기는 나와 있지 않습니다. –

+0

나는 IEEE 32 비트와 64 비트 부동 소수점 타입임을 * 효과적으로 * 알았지 만. 아마도 나는 내 가정을 한정하기 위해'static_assert'를 넣을 것입니다. –

+0

표준은'double'과'float'을 IEEE 부동 소수점 타입으로 요구하지 않습니다. 그것이 필요하다면'numeric_limits :: is_iec559'는 항상 사실 일 것이므로 중복 될 것입니다. –

답변

4

size_t은 개체의 크기를 바이트 단위로 포함 할 수있을만큼만 부호가 필요하며 크기가 크기 때문에 이식 할 수 없습니다.

타입이 size_t는 개체의 크기 (바이트)를 포함하기에 충분한 구현 정의 부호없는 정수 타입 입니다 : 이것은 초안 C++ 표준 섹션 18.2유형 말한다에 덮여있다.

특정 너비가 필요한 경우 cstdint header에 정의 된 유형을 사용해야합니다.

참고, 표준이 플로트이중의 크기를 지정하지 않는, 그들은 IEEE 754 부동 소수점 숫자가 될 필요가 없습니다.

+0

+1 표준을 인용 할 때 특히 감사드립니다. 그렇게하면 사장님을 행복하게 해주는 유용한 프로그램 주석이 남을 것입니다. –

2

실제로는 doublefloat도 표준화 된 크기가 아닙니다. 사실, (u) intNN_t 유형 만 존재하며 존재하지 않을 수도 있습니다.

필요한 설명서가 표준이 아니므로 대상 컴파일러 설명서입니다.

컴파일러, 컴파일러 버전, 빌드 구성 및 표준 라이브러리 간의 안정성을 위해 특정 플랫폼에서 std::size_t의 크기가 일정하다고 가정하는 것이 안전합니다. 그러나 32 비트 및 64 비트 빌드는 서로 다른 플랫폼입니다.