요 전날에 조합에 대해 읽었고 함께 제공된 샘플 함수를 시도했습니다. 쉬운 일이지만, 결과는 명확하고 완전히 쓰레기였습니다.Union 구조체가 구조체 명명법에 대한 가비지와 일반적인 질문을 생성합니다.
첫번째 예는 다음의 int 상정
union Test
{
int Int;
struct
{
char byte1;
char byte2;
char byte3;
char byte4;
} Bytes;
};
32 비트를 갖는. 나는 값 Test t; t.Int = 7;
을 설정 한 다음
cout << t.Bytes.byte1 << etc...
개별 바이트를 법원 후, 거기에 아무것도 표시되지 않습니다,하지만 내 컴퓨터에서 경고음이 발생합니다. 나는 꽤 이상하게 보입니다.
두 번째 예는 더 나쁜 결과를 나타냅니다.
union SwitchEndian
{
unsigned short word;
struct
{
unsigned char hi;
unsigned char lo;
} data;
} Switcher;
내 의견으로는 조금 어색해 보인다. 심지어에서 정의되지 cout << Switcher.data.hi << endl
와 문자 이것의 결과를 한 호출
Switcher.word = 7656;
같은 값을 설정할 때 어쨌든, 그것이 말하는 설명에서이 자동 높은/리틀 엔디안 형식으로 결과를 저장한다 ASCII 차트. 왜 그 사람들이 나타나는지 모르겠습니다.
마지막으로 구조체 끝에 Bytes를 배치하는 대신에 바로 옆에 배치하여 예제를 수정하려고 할 때 오류가 발생했습니다. 그래서 그 대신
struct {} Bytes;
의 나는
struct Bytes {};
이 나에게 큰 팔자 '오류를 던져 쓰고 싶었다. 이것들의 차이점은 무엇입니까? C++은 무명의 구조체를 가질 수 없기 때문에, 처음과 끝 부분에 위치한 Byte가 이름을 짓는 것처럼 보였습니다. 아니오를 제외하고, 그것은 내가 생각하는 전체 답변이 아닙니다. 그럼 뭐야?