std::ranges::ssize
| 헤더 <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))>으로 하면:
커스터마이제이션 포인트 객체
이름
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++20)
|
범위의 크기와 같은 정수를 반환합니다
(커스터마이제이션 포인트 객체) |
|
(C++20)
|
범위가 상수 시간에 자신의 크기를 알 수 있음을 명시합니다
(컨셉) |
|
(C++20)
|
반복자와 센티넬 사이의 거리, 또는 범위의 시작과 끝 사이의 거리를 반환합니다
(알고리즘 함수 객체) |
|
(C++17)
(C++20)
|
컨테이너나 배열의 크기를 반환합니다
(함수 템플릿) |