std:: size_t
|
헤더에 정의됨
<cstddef>
|
||
|
헤더에 정의됨
<cstdio>
|
||
|
헤더에 정의됨
<cstdlib>
|
||
|
헤더에 정의됨
<cstring>
|
||
|
헤더에 정의됨
<ctime>
|
||
|
헤더에 정의됨
<cuchar>
|
(C++17부터)
|
|
|
헤더에 정의됨
<cwchar>
|
||
|
typedef
/* implementation-defined */
size_t
;
|
||
std::size_t
는 다음 연산자들의 결과값의 부호 없는 정수 타입입니다:
| (C++11부터) |
프로그램이 초대형 타입을 형성하려고 시도하는 경우(즉, 해당
객체 표현
의 바이트 수가
std::size_t
에서 표현 가능한 최댓값을 초과하는 경우), 프로그램은 ill-formed입니다.
|
|
(C++11부터) |
목차 |
참고 사항
std::size_t
는 이론적으로 가능한 모든 타입(배열 포함)의 객체 최대 크기를 저장할 수 있습니다. 많은 플랫폼에서(세그먼트 주소 체계를 사용하는 시스템은 예외)
std::size_t
는 비멤버 포인터의 값을 안전하게 저장할 수 있으며, 이 경우
std::uintptr_t
와 동의어입니다.
std::size_t
는 일반적으로 배열 인덱싱과 루프 카운팅에 사용됩니다.
unsigned
int
와 같은 다른 타입을 배열 인덱싱에 사용하는 프로그램은, 예를 들어 64비트 시스템에서 인덱스가
UINT_MAX
를 초과하거나 32비트 모듈러 연산에 의존하는 경우 실패할 수 있습니다.
C++ 컨테이너(예:
std::string
,
std::vector
등)를 인덱싱할 때 적절한 타입은 해당 컨테이너가 제공하는 중첩 타입
size_type
입니다. 이는 일반적으로
std::size_t
의 동의어로 정의됩니다.
std::size_t
의 선언이 다른 표준 라이브러리 헤더에서 사용 가능한지 여부는 규정되어 있지 않습니다. 구현체는 표준에서
std::size_t
사용을 요구하는 경우에도 이 이름을 도입하지 않을 수 있습니다.
|
정수 리터럴 접미사
for
|
(C++23부터) |
가능한 구현
using size_t = decltype ( sizeof 0 ) ;
예제
#include <array> #include <cstddef> #include <iostream> int main() { std::array<std::size_t, 10> a; // C++23 std::size_t 리터럴 사용 예제 for (auto i = 0uz; i != a.size(); ++i) std::cout << (a[i] = i) << ' '; std::cout << '\n'; // 감소 루프 예제 for (std::size_t i = a.size(); i--;) std::cout << a[i] << ' '; std::cout << '\n'; // 단순한 감소 루프 주의: // for (std::size_t i = a.size() - 1; i >= 0; --i) ... // 는 무한 루프입니다. 부호 없는 숫자는 항상 음수가 아니기 때문입니다 }
출력:
0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| CWG 1122 | C++98 |
std::size_t
가 순환 정의되었음
[1]
|
구현에 따라 정의됨 |
| CWG 1464 | C++98 |
객체 크기가
std::size_t
로 표현 불가능할 수 있었음
|
해당 타입은 형식 오류 |
-
↑
std::size_t의 정의는 C 언어에서size_t의 정의와 정확히 동일했으며, 이는 " sizeof 연산자의 결과 타입"입니다. C 언어에서는sizeof연산자의 결과 타입이 구현체 정의 부호 없는 정수 타입이므로 순환 정의가 존재하지 않습니다.
참고문헌
- C++23 표준 (ISO/IEC 14882:2024):
-
- 6.8.4 복합 타입 [basic.compound] (p: 79-80)
-
- 7.6.2.5 Sizeof [expr.sizeof] (p: 136)
-
- 7.6.2.6 Alignof [expr.alignof] (p: 136)
-
- 17.2.4 크기, 정렬 및 오프셋 [support.types.layout] (p: 504-505)
- C++20 표준(ISO/IEC 14882:2020):
-
- 6.8.3 복합 타입 [basic.compound] (p: 75-76)
-
- 7.6.2.5 Sizeof [expr.sizeof] (p: 129-130)
-
- 7.6.2.6 Alignof [expr.alignof] (p: 130)
-
- 17.2.4 크기, 정렬 및 오프셋 [support.types.layout] (p: 507-508)
- C++17 표준 (ISO/IEC 14882:2017):
-
- 6.9.2 복합 타입 [basic.compound] (p: 81-82)
-
- 8.3.3 Sizeof [expr.sizeof] (p: 121-122)
-
- 8.3.6 Alignof [expr.alignof] (p: 129)
-
- 21.2.4 크기, 정렬 및 오프셋 [support.types.layout] (p: 479)
- C++14 표준(ISO/IEC 14882:2014):
-
- 3.9.2 복합 타입 [basic.compound] (페이지: 73-74)
-
- 5.3.3 Sizeof [expr.sizeof] (페이지: 109-110)
-
- 5.3.6 Alignof [expr.alignof] (페이지: 116)
-
- 18.2 타입 [support.types] (페이지: 443-444)
- C++11 표준 (ISO/IEC 14882:2011):
-
- 5.3.3 Sizeof [expr.sizeof] (p: 111)
-
- 5.3.6 Alignof [expr.alignof] (p: 116)
-
- 18.2 Types [support.types] (p: 454-455)
- C++03 표준 (ISO/IEC 14882:2003):
-
- 5.3.3 Sizeof [expr.sizeof] (p: 79)
- C++98 표준(ISO/IEC 14882:1998):
-
- 5.3.3 Sizeof [expr.sizeof] (p: 77)
참고 항목
|
두 포인터를 뺄 때 반환되는 부호 있는 정수형
(typedef) |
|
|
표준 레이아웃
타입의 시작부터 지정된 멤버까지의 바이트 오프셋
(함수 매크로) |
|
| 정수 리터럴 | 2진, (C++14부터) 10진, 8진, 또는 16진 정수형 숫자 |
|
C 문서
for
size_t
|
|