Namespaces
Variants

Non-propagating cache (C++20)

From cppreference.net
Ranges library
Range adaptors
Helper items
(until C++23) (C++23)
non-propagating-cache


template < class T >

requires std:: is_object_v < T >

class /*non-propagating-cache*/ ;
(desde C++20)
( solo para exposición* )

Algunos adaptadores de rango como ranges::join_view y ranges::lazy_split_view almacenan condicionalmente un valor (por ejemplo, un iterador) que se especifica en términos de una plantilla de clase solo para exposición non-propagating-cache .

El contenedor se comporta exactamente como std:: optional < T > , excepto que:

  • no copia el valor del origen cuando se construye por copia o se asigna,
  • restablece el valor del origen cuando se mueve desde él,
  • restablece su valor cuando se asigna desde otro, y
  • además proporciona una plantilla de función miembro para permitir que una vista de entrada almacene temporalmente valores en caché mientras se itera sobre ella.

El contenedor encapsula una caché que contiene un valor. Limpiar la caché es una operación equivalente a reiniciar un valor contenido. Dicha operación se realiza al copiar o mover un contenedor.

Contenidos

Parámetros de plantilla

T - el tipo del valor contenido, debe ser un tipo objeto

Funciones miembro

Constructores de copia y movimiento

constexpr /*non-propagating-cache*/
( const /*non-propagating-cache*/ & ) noexcept { }
(1) (desde C++20)
constexpr /*non-propagating-cache*/
( /*non-propagating-cache*/ && other ) noexcept { other. reset ( ) ; }
(2) (desde C++20)
1) El constructor de copia no tiene efecto.
2) El constructor de movimiento limpia la caché de other .

Operadores de asignación de copia y movimiento

constexpr /*non-propagating-cache*/ &

operator = ( const /*non-propagating-cache*/ & other ) noexcept
{
if ( std:: addressof ( other ) ! = this )
reset ( ) ;
return * this ;

}
(1) (since C++20)
constexpr /*non-propagating-cache*/ &

operator = ( /*non-propagating-cache*/ && other ) noexcept
{
reset ( ) ;
other. reset ( ) ;
return * this ;

}
(2) (since C++20)
1) El operador de asignación de copia limpia la caché de * this .
2) El operador de asignación de movimiento limpia las cachés tanto de * this como de other .

non-propagating-cache <T>:: emplace-deref

template < class I >
constexpr T & /*emplace-deref*/ ( const I & i ) ;
(desde C++20)
( solo para exposición* )

Inicializa el valor contenido mediante inicialización directa (pero no inicialización directa de lista) con * i . Si * this ya contiene un valor antes de la llamada, reset ( ) es llamado.

Retorna una referencia al nuevo valor contenido.

El programa está mal formado a menos que la declaración T t ( * i ) ; esté bien formada para alguna variable inventada t . Si * i es un prvalue de T posiblemente calificado cv, entonces no se requiere que sea movible.

Miembros idénticos a std:: optional

Funciones miembro

construye el objeto optional
(función miembro pública de std::optional<T> )
destruye el valor contenido, si existe
(función miembro pública de std::optional<T> )
asigna contenido
(función miembro pública de std::optional<T> )
Observadores
accede al valor contenido
(función miembro pública de std::optional<T> )
comprueba si el objeto contiene un valor
(función miembro pública de std::optional<T> )
Modificadores
destruye cualquier valor contenido
(función miembro pública de std::optional<T> )
construye el valor contenido in-situ
(función miembro pública de std::optional<T> )

Notas

non-propagating-cache se utiliza en implementaciones para almacenar en caché el resultado de begin ( ) para proporcionar una complejidad temporal amortizada constante del método.

Véase también

una view que consiste en la secuencia obtenida al aplanar una view de range s
(plantilla de clase) (objeto adaptador de rango)
una view que consiste en la secuencia obtenida al aplanar una view de ranges, con el delimitador entre elementos
(plantilla de clase) (objeto adaptador de rango)
una view sobre los subrangos obtenidos al dividir otra view usando un delimitador
(plantilla de clase) (objeto adaptador de rango)
una view sobre los subrangos obtenidos al dividir otra view usando un delimitador
(plantilla de clase) (objeto adaptador de rango)
un rango de view s que son fragmentos sucesivos no superpuestos de tamaño N de los elementos de otra view
(plantilla de clase) (objeto adaptador de rango)