Namespaces
Variants

std::ranges:: ssize

From cppreference.net
Ranges library
Range adaptors
Definido en el encabezado <ranges>
Definido en el encabezado <iterator>
inline namespace /* unspecified */ {

inline constexpr /* unspecified */ ssize = /* unspecified */ ;

}
(desde C++20)
(objeto de punto de personalización)
Firma de llamada
template < class T >

requires /* see below */

constexpr auto ssize ( T && t ) ;
(desde C++20)

Calcula el número de elementos en t en tiempo constante, y convierte el resultado a un tipo con signo.

Dada la subexpresión de la cual t denota el objeto resultado (posiblemente materializado ) como E :

Contenidos

Objetos de punto de personalización

El nombre ranges::ssize denota un objeto de punto de personalización , que es un objeto función constante de un tipo de clase literal semiregular . Consulte CustomizationPointObject para más detalles.

Notas

Si ranges :: ssize ( e ) es válido para una expresión e , el tipo de retorno es un tipo similar a entero con signo .

Ejemplo

#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';
}

Salida:

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

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3403 C++20 ranges::size funcionaba para algunos tipos no-range pero ranges::ssize no funcionaba corregido para funcionar

Véase también

devuelve un entero igual al tamaño de un rango
(objeto de punto de personalización)
especifica que un rango conoce su tamaño en tiempo constante
(concepto)
devuelve la distancia entre un iterador y un centinela, o entre el inicio y fin de un rango
(objeto función algoritmo)
(C++17) (C++20)
devuelve el tamaño de un contenedor o array
(plantilla de función)