std::ranges:: ssize
|
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 */
|
(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 :
- Si ranges:: size ( t ) es incorrecto, ranges :: ssize ( E ) también es incorrecto.
-
En caso contrario, sea
Signedigual amake-signed-like-t < decltype ( ranges:: size ( t ) ) > :-
Si
std::ptrdiff_t
es más amplio que
Signed, ranges :: ssize ( E ) es equivalente-expresión a static_cast < std:: ptrdiff_t > ( ranges:: size ( t ) ) . - En caso contrario, ranges :: ssize ( E ) es equivalente-expresión a static_cast < Signed > ( ranges:: size ( t ) ) .
-
Si
std::ptrdiff_t
es más amplio que
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
|
(C++20)
|
devuelve un entero igual al tamaño de un rango
(objeto de punto de personalización) |
|
(C++20)
|
especifica que un rango conoce su tamaño en tiempo constante
(concepto) |
|
(C++20)
|
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) |