2017-04-21 2 views
17

C++ (및 C) 엄격한 앨리어싱 규칙에는 char*unsigned char*이 다른 포인터의 별칭이 될 수 있습니다.std :: byte pointer는 char *와 같은 앨리어싱 관련이 있습니까?

AFAIK에는 uint8_t*에 대한 유사한 규칙이 없습니다.

내 질문 : std::byte 포인터에 대한 앨리어싱 규칙은 무엇입니까?

은 C++ 참조 현재 단지 specifies :

는 다른 오브젝트 (객체 표현)에 의해 점유 원시 메모리에 액세스하는 데 사용할 수있는 문자 유형 (문자, 부호 문자, 부호 문자)처럼

, 그러나 그와는 달리 유형이 아니며 문자 유형이 아니며 산술 유형이 아닙니다.

현재의 표준 초안에서
+4

는 같은 앨리어싱 규칙은 char' – Justin

+2

@Justin'에 관한 표준 : byte''에 적용 http://en.cppreference.com/w/cpp/language/reinterpret_cast#Type_aliasing : 당신은 할 수 있습니다 "규칙 적용"은 어떤 규칙이 적용되는지 말하지 않기 때문에 좀 더 명확해야합니다. 'std :: byte'는'char'와'unsigned char'와 같은 규칙을 가지고 있습니다. – ShadowRanger

+0

@ Justin : 처음 게시했을 때 ("en.cppreference.com/w/cpp/language/... 앨리어싱 규칙이'std :: byte'에 적용됩니다.)). 그 이후로 편집했습니다. 사전 편집을로드했습니다. 고쳐 주셔서 감사합니다. – ShadowRanger

답변

14

([basic.types/2) (베이스 클래스 서브 오브젝트 이외) 사소 복사 가능한 타입 T의 물체를 들어

,인지 여부 객체가 T 형식의 유효한 값을 보유하고있는 경우 객체를 구성하는 기본 바이트 ([intro.memory])는 char, unsigned char 또는 std :: byte ([cstddef .syn]). 해당 배열의 내용을 객체 에 다시 복사하면 객체는 원래 값을 계속 유지해야합니다.

그렇기 때문에 cppreference가 요약 한 것과 같이 세 가지 유형에 동일한 별칭 규칙이 적용됩니다. 프로그램이 하나보다 을 통해 기타의 glvalue을 객체의 저장된 값에 액세스를 시도

경우 다음

또한 ([basic.lval] /8.8) 언급 할 가치가 있습니다 동작이 유형이 인 경우

  • char, unsigned char 또는 std :: byte 유형입니다.
관련 문제