2017-10-07 1 views
0

sizeof 연산자가 "size_t"유형의 값을 생성하지 않고 대신 "size_t"와 동일한 기본 유형을 갖는 값을 생성한다는 것이 나보다 훨씬 지식이 풍부한 사람이 들었다. 이것이 의미 전문적 불과, C++ 11 5.3.3.6 및 C++ (14) 5.3.3.6 모두 상태가있을 수 있지만 다음sizeof 연산자에 의해 생성 된 데이터 유형

The result of sizeof and sizeof... is a constant of type std::size_t. 
[ Note: std::size_t is defined in the standard header <cstddef> (18.2). —end note ] 

나는 이것이 의미하는 것으로 해석 할 수있는 방법이 있다면 그 "unsigned int", "unsigned long"또는 size_t가 특정 컴파일러에서 나타 내기 때문에 "std :: size_t"또는 "size_t"를 표시해야하는 sizeof 데이터 형식을 표시하고 "std : : size_t "또는"size_t "컴파일러가 내부적으로 size_t라는 것을 알고 있기 때문에 범위에 size_t의 typedef가 없더라도.

하지만, 내 해석이 잘못하고 기본 데이터 유형을 표시하는 대신 올바른 될 경우,해야하지 C++ (11)와 C++ (14) 대신 말할 뭔가 같은 :

The result of sizeof and sizeof... is a constant of **the same type represented** by std::size_t. 

나는 이것이 핀 머리에있는 천사의 숫자에 대해 논쟁하고있는 것을 알지만, 나는 아직도 어떤 것이 율법 주의적으로 올바른지 이해하고 싶다.

감사합니다, 레이

+0

구현시'size_t '는'unsigned long'과 같을 것이고 컴파일러는 그것을 알고 있습니다. –

+0

"표현"은 좋은 선택이 아닙니다. 'unsigned int'와'unsigned long'이 완전히 똑같은 표현을하는 것은 드문 일이 아니지만 여전히 구별되는 유형입니다. 'std :: size_t'는 "sizeof에 의해 반환 된 타입"을 의미하는 이름 일뿐입니다. –

답변

3

표준 : : size_t로는 형식 정의 이름 또는 유형 별칭, 즉 다른 기존 유형의 synonim이다; 그것은 구별 유형이 아니며 이름 조회 목적으로 만 존재합니다.

때문에, 예를 들어, 컴파일러가 내부적으로 별칭이 무엇인지 알고 있다고 말했다

, 그것은 사실 ... 그것의 기본 유형 VS를 size_t에 대해 ... 등/전문/오버로드 할 수없는, 그래서 수 말하자면, 진단 등을 개선하기 위해 그것을 사용하고 프로그래머에게 도움이되는 근본적인 형태 대신 컴파일러에서 생성 된 메시지에 나타날 수도 있고 그렇지 않을 수도 있습니다 ...

관련 문제