열거형에서 사용하는 정수형을 변경하는 방법(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
'programing' 카테고리의 다른 글
봄맞이 보안에 개미 사냥꾼이 여럿 등장합니다. (0) | 2023.10.30 |
---|---|
내용 편집 가능한 div의 새 줄에서 이벤트 트리거 (0) | 2023.10.30 |
jQuery, 전체 요소의 html을 가져옵니다. (0) | 2023.10.30 |
휴대용 isnan/isinf 기능을 만드는 방법 (0) | 2023.10.30 |
Git에서 tree-ish는 무엇을 의미합니까? (0) | 2023.10.25 |