Namespaces
Variants

std:: size_t

From cppreference.net
Utilities library
헤더에 정의됨 <cstddef>
헤더에 정의됨 <cstdio>
헤더에 정의됨 <cstdlib>
헤더에 정의됨 <cstring>
헤더에 정의됨 <ctime>
헤더에 정의됨 <cuchar>
(C++17부터)
헤더에 정의됨 <cwchar>
typedef /* implementation-defined */ size_t ;

std::size_t 는 다음 연산자들의 결과값의 부호 없는 정수 타입입니다:

(C++11부터)

프로그램이 초대형 타입을 형성하려고 시도하는 경우(즉, 해당 객체 표현 의 바이트 수가 std::size_t 에서 표현 가능한 최댓값을 초과하는 경우), 프로그램은 ill-formed입니다.

std::size_t 의 비트 너비는 16 이상입니다.

(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 std::size_t z 또는 Z u 또는 U 의 임의 조합입니다 (즉 zu , zU , Zu , ZU , uz , uZ , Uz , 또는 UZ ).

(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 로 표현 불가능할 수 있었음 해당 타입은 형식 오류
  1. 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