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
обозначает
объект точки кастомизации
, который является константным
функциональным объектом
типа
литерального
semiregular
класса. Для подробностей см.
CustomizationPointObject
.
Примечания
Если для выражения e допустимо ranges :: ssize ( e ) , то возвращаемый тип является signed-integer-like типом .
Пример
#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
работал для некоторых не-range типов, но
ranges::ssize
не работал
|
исправлено |
Смотрите также
|
(C++20)
|
возвращает целое число, равное размеру диапазона
(объект точки кастомизации) |
|
(C++20)
|
указывает, что диапазон знает свой размер за постоянное время
(концепт) |
|
(C++20)
|
возвращает расстояние между итератором и стражем, или между началом и концом диапазона
(функциональный объект алгоритма) |
|
(C++17)
(C++20)
|
возвращает размер контейнера или массива
(шаблон функции) |