Namespaces
Variants

std::ranges::ssize

cppreference.net에서 가져옴
 
 
범위 라이브러리
범위 어댑터
 
헤더 <ranges>
에 정의됨<iterator>
inline namespace /* unspecified */ {
    inline constexpr /* unspecified */ ssize = /* unspecified */;
}
헤더
(C++20부터)
(사용자 정의점 객체)
template< class T >
    requires /* see below */
constexpr auto ssize( T&& t );
호출 시그니처

(C++20부터)t의 요소 수를 상수 시간에 계산하고 결과를 부호 있는 타입으로 변환합니다.

다음의 부분 표현식이 주어졌을 때, 여기서 t는 (잠재적으로 구체화된) 결과 객체를 E로 나타냅니다:

  • 만약 ranges::size(t)이 잘못된 형식(ill-formed)이면, ranges::ssize(E)도 잘못된 형식입니다.
  • 그렇지 않으면, Signed을 make-signed-like-t <decltype(ranges::size(t))>으로 하면:
    • 만약 std::ptrdiff_t가 Signed보다 더 넓다면, ranges::ssize(E)는 과 표현식-동등(expression-equivalent)static_cast<std::ptrdiff_t>(ranges::size(t))합니다.
    • 그렇지 않으면, ranges::ssize(E)은 static_cast<Signed>(ranges::size(t))과 표현식-동등합니다.

커스터마이제이션 포인트 객체

이름 ranges::ssize 는 사용자 지정 지점 객체 를 나타내며, 이는 함수 객체 의 const 리터럴 semiregular 클래스 타입입니다. 자세한 내용은 CustomizationPointObject 를 참조하십시오.

참고 사항

만약 ranges :: ssize ( e ) 가 표현식 e 에 대해 유효하다면, 반환 타입은 부호 있는 정수형 타입(signed-integer-like type) 입니다.

예제

#include <array>
#include <iostream>
#include <ranges>
#include <type_traits>
int main()
{
    std::array arr{1, 2, 3, 4, 5};
    auto s = std::ranges::ssize(arr);
    std::cout << "ranges::ssize(arr) = " << s << '\n'
              << "ranges::ssize is "
              << (std::is_signed_v<decltype(s)> ? "signed" : "unsigned")
              << '\n';
    std::cout << "reversed arr: ";
    for (--s; s >= 0; --s)
        std::cout << arr[s] << ' ';
    std::cout << "\n" "s = " << s << '\n';
}

출력:

ranges::ssize(arr) = 5
ranges::ssize is signed
reversed arr: 5 4 3 2 1
s = -1

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 수정된 동작
LWG 3403 C++20 ranges::size 는 일부 비-범위 타입에 대해 동작했지만 ranges::ssize 는 동작하지 않음 동작하도록 수정됨

참고 항목

범위의 크기와 같은 정수를 반환합니다
(커스터마이제이션 포인트 객체)
범위가 상수 시간에 자신의 크기를 알 수 있음을 명시합니다
(컨셉)
반복자와 센티넬 사이의 거리, 또는 범위의 시작과 끝 사이의 거리를 반환합니다
(알고리즘 함수 객체)
(C++17) (C++20)
컨테이너나 배열의 크기를 반환합니다
(함수 템플릿)