>백엔드 개발 >C++ >알려진 단점에도 불구하고 'size_t'가 서명되지 않은 이유는 무엇입니까?

알려진 단점에도 불구하고 'size_t'가 서명되지 않은 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-28 09:24:29593검색

Why is `size_t` Unsigned Despite the Known Drawbacks?

size_t가 서명되지 않은 이유는 무엇입니까?

질문:

그의 책에서 Bjarne Stroustrup은 다음과 같이 조언합니다. 양의 정수를 표현하기 위한 추가 비트를 얻기 위해 부호 없는 정수를 사용하는 것에 반대합니다. 그러나 배열 및 문자열 크기를 나타내는 데 일반적으로 사용되는 유형인 size_t는 부호가 없습니다. 이것이 실수였습니까? size_t의 사용을 최소화해야 합니까?

답변:

size_t는 역사적인 이유로 서명되지 않았습니다.

아키텍처 제한:

16비트 포인터를 사용하는 이전 아키텍처에서는 문자열을 32KB로 제한하는 것이 비실용적입니다. 이 문제를 해결하기 위해 C 표준에서는 size_t에 대응하는 서명된 ptrdiff_t가 17비트의 유효 범위를 갖도록 요구합니다.

임베디드 시스템:

특정 임베디드 프로그래밍에서 이러한 역사적 이유는 여전히 유효합니다.

부호 없는 유형의 단점:

그러나 최신 32비트 및 64비트 프로그래밍에서 부호 없는 유형은 심각한 단점을 나타냅니다. :

  • 암시적 변환 규칙: C와 C의 암시적 변환 규칙은 예상치 못한 결과를 생성할 수 있는 연산과 비교를 허용하므로 부호 없는 유형을 버그 유인자로 취급합니다(예: 문자열 ("Hi").length() < -3).

결론:

size_t를 unsigned로 만들기로 한 결정은 실수가 아니었습니다. 당시의 건축적 한계 그러나 현대 프로그래밍 관행에서는 수치 연산에 부호 없는 유형을 사용하는 것이 고유한 단점으로 인해 권장되지 않습니다.

위 내용은 알려진 단점에도 불구하고 'size_t'가 서명되지 않은 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.