나는 첫 번째 것을 이해하지만 두 번째 것을 이해합니까? 언제 그리고 왜 그렇게 할 수 있습니까?변수 이름없이 enum 사용
enum cartoon { HOMER, MARGE, BART, LISA, MAGGIE };
enum { HOMER, MARGE, BART, LISA, MAGGIE };
나는 첫 번째 것을 이해하지만 두 번째 것을 이해합니까? 언제 그리고 왜 그렇게 할 수 있습니까?변수 이름없이 enum 사용
enum cartoon { HOMER, MARGE, BART, LISA, MAGGIE };
enum { HOMER, MARGE, BART, LISA, MAGGIE };
, 예를 들어,
class Encryption {
public:
enum { DEFAUTL_KEYLEN=16, SHORT_KEYLEN=8, LONG_KEYLEN=32 };
// ...
};
byte key[Encryption::DEFAUTL_KEYLEN];
이제 어떻게 보았는지/접근했는지 궁금합니다. 그래서 그것을 범위로 가져오고 ClassName :: enum 값을 사용하여이를 사용하므로 기본적으로 enum {blah, hah, lol}은 ClassName :: blah 등을 통해 액세스 할 수 있습니다. 감사. – RoR
이 단순히 단순히 int
이외의 유형하지 않고, 각각의 값을 상수 식을 생성, 그래서 당신은 단순히 int
을 수락, 당신이 가진 것 아무것도 유형으로 익명 열거를 사용할 수 없으며, 그런 다음 상수와 비교하십시오. 이 같은
뭔가이 같은 대
void doSomething(int c);
: 그런데
void doSomething(cartoon c);
, 당신의 구현은 동일 할 것이다 이름이 열거 형의 경우, 유일한 단점 때문에 강한 타이핑입니다.
그들은 실제로 상수가 아니라는 것을 제외하고는 * 상수 표현 *입니다. 때로는 큰 차이가 있습니다. 예를 들어, 참조 또는 주소를 상수로 가져올 수 있습니다. 열거 기호로는 그렇게 할 수 없습니다. –
enum, 공용체, 구조체 및 클래스는 구문에서 공통된 부분을 공유합니다. 동일 이 패턴이없는 패턴이 무작위로 사용됩니다. 그러나 언젠가 이것을 발견 할 수 있습니다.
typedef enum { HOMER, MARGE, BART, LISA, MAGGIE } cartoont;
또는 몇 가지 상태 만 포함하는 단일 변수가있는 경우
enum { HOMER, MARGE, BART, LISA, MAGGIE } my_var;
이 다음과 같은 선언을 피하십시오.
enum cartoon { HOMER, MARGE, BART, LISA, MAGGIE };
cartoon my_var;
두 번째 것은 익명 enum
입니다. 필드가 필요할 때 유용 할 수 있지만이 열거 유형의 변수를 선언 할 생각은 없습니다.
template<class T>
struct some_metafunction
{
enum { res = 0; };
};
당신이 클래스의 기능을 노출 그것을 범위를 제공하는
클래스, 이러한 열거 형을 정의하고, 할 수 있습니다
'= 0;'부분은 실제로 필요한가요? –
@Jacob 그것은 단지 예제 일뿐입니다. (일반적으로'res'의 값은'T'에 달려 있습니다.) – icecrime
나는 임베디드 프로젝트에서 만난 anonyous enum의 실제 사용 예제를 제공하고 있습니다. 프로젝트에서 EEPROM은 일부 매개 변수를 저장하는 데 사용됩니다. 이 매개 변수가 카톤 캐릭터의 연령대라고 가정 해 보겠습니다. 각 매개 변수의 크기는 연속 주소에서 1 바이트입니다.
이 매개 변수는 프로세서의 전원이 켜지면 ROM에 저장된 어레이로 복사됩니다.
uint8_t ROM_AGE[END_AGE]
우리는 여기 anomymous 열거 정의하는 경우 :
enum { HOMER_AGE, MARGE_AGE, BART_AGE, LISA_AGE, MAGGIE_AGE, END_AGE };
그런 다음 열거의 핵심 단어는 ROM_AGE[HOMER_AGE]
같은 인덱스에 각 문자의 나이를 사용할 수있다. 이 열거 형을 사용하면 ROM_AGE[0]
을 사용하는 것보다 가독성이 훨씬 좋습니다.
심슨을 너무 많이 보았을 때 ??? –
그런 건 아니야 .. –
@ 노아 : 아마도 그것이 실제로 불법이며 오해의 소지가 있다고 생각하게 만들었으므로 g ++에 대한 나의 예와 비슷한 테스트를 컴파일했다. 실제로 컴파일 된 온라인 참조는이 구문 옵션을 표시하지 않지만 컴파일되고 실행됩니다. – davka