programing

열거형에서 사용하는 정수형을 변경하는 방법(C++)?

powerit 2023. 10. 30. 21:18
반응형

열거형에서 사용하는 정수형을 변경하는 방법(C++)?

C++ 열거형이 있는 경우:

enum Foo
{
  Bar,
  Baz,
  Bork,
};

컴파일러에게 a를 사용하라고 어떻게 말해야 합니까?uint16_t실제로 열거된 값을 저장할 수 있습니까?

편집: GCC는 C++11을 구현할 때 이 기능을 지원합니까?

C++98/03에서는 할 수 없습니다.C++11은 당신이 그것을 할 수 있게 하고, 없이. enum class다른 사람들이 계속 당신에게 말하는 것처럼 보입니다.

enum EnumType : uint16_t
{
  Bar,
  Baz,
  Bork,
};

다시 말하지만, 당신은 사용할 필요가 없습니다.enum class. 나쁜 생각은 아니지만, 그럴 필요는 없습니다.


GCC는 C++11을 구현할 때 이 기능을 지원합니까?

GCC의 어떤 버전입니까?GCC 4.4가 이 기능을 추가한 것처럼 보이지만, 안정성을 위해 더 최근 버전을 살펴봐야 할 것입니다.

C++11에서는 다음을 수행할 수 있습니다.

enum class Foo : uint16_t 
{
  Bar,
  Baz,
  Bork,
};

나중에 열거형의 기본 유형을 알 도 있습니다.

#include <type_traits> 

std::underlying_type<Foo>::type v = 10; //v is uint16_t

와 함께c++11이제 기본 유형을 명시적으로 설정할 수 있는 다음과 같은 기능이 있습니다.

enum class Foo: uint16_t 
{ 
   Bar,
   Baz,
   Bork,
}; 

C++2011 이전 버전에서는 다음과 같은 적절한 범위의 값을 사용하여 최소한의 스토리지를 강제로 저장할 수 있습니다.

enum foo {
    v0 = 0,
    vmax = 32767
};

저는 컴파일러가 기본 유형으로 기호 또는 비부호 정수 유형을 자유롭게 선택할 수 있다고 생각합니다.위 범위는 표현이 적어도 사용하는 범위입니다.short그것의 기초가 되는 정수이기 때문입니다.조금이라도 크게 만들면 사용할 수 있습니다.long대신.물론 이것은 최소 범위만을 강제하고 컴파일러는 더 큰 범위를 자유롭게 선택할 수 있습니다.또한 위의 정의에 따라 범위 밖으로 이탈하는 것이 허용되지 않습니다.[0, 32767]: (적어도) 16비트 범위가 필요한 경우 해당 값을 사용해야 합니다.)

언급URL : https://stackoverflow.com/questions/9853633/how-to-change-the-integer-type-used-by-an-enum-c

반응형