std::ranges:: ssize
|
헤더에 정의됨
<ranges>
|
||
|
헤더에 정의됨
<iterator>
|
||
|
inline
namespace
/* unspecified */
{
inline
constexpr
/* unspecified */
ssize
=
/* unspecified */
;
|
(C++20부터)
(커스터마이제이션 포인트 객체) |
|
|
호출 시그니처
|
||
|
template
<
class
T
>
requires
/* see below */
|
(C++20부터) | |
t 내 요소의 개수를 상수 시간에 계산하고, 결과를 부호 있는 타입으로 변환합니다.
주어진 부분식 에서 t 가 ( 구체화된 가능성이 있는) 결과 객체를 나타내고 E 로 표기할 때:
- 만약 ranges:: size ( t ) 가 형식적으로 올바르지 않다면, ranges :: ssize ( E ) 또한 형식적으로 올바르지 않습니다.
-
그렇지 않으면,
Signed를make-signed-like-t < decltype ( ranges:: size ( t ) ) > 로 정의합니다:-
만약
std::ptrdiff_t
가
Signed보다 넓은 범위를 갖는다면, ranges :: ssize ( E ) 는 표현식 동등 하게 static_cast < std:: ptrdiff_t > ( ranges:: size ( t ) ) 입니다. - 그렇지 않으면, ranges :: ssize ( E ) 는 표현식 동등하게 static_cast < Signed > ( ranges:: size ( t ) ) 입니다.
-
만약
std::ptrdiff_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)
|
컨테이너나 배열의 크기를 반환합니다
(함수 템플릿) |