std::assignable_from
Definido en el archivo de encabezado <concepts>
|
||
template<typename LHS, typename RHS> concept assignable_from = |
(desde C++20) | |
El concepto assignable_from<LHS, RHS>
especifica que la expresión del tipo y la categoría de valor especificada por RHS
puede asignarse a una expresión lvalue cuyo tipo se especifica por LHS
.
Contenido |
[editar] Requerimientos semánticos
Dado
-
lhs
, un lvalue que se refiere a un objetolcopy
tal que decltype((lhs)) esLHS
, -
rhs
, una expresión tal que decltype((rhs)) esRHS
, -
rcopy
, un objeto distinto que es igual arhs
,
assignable_from<LHS, RHS>
se modela solamente si
- std::addressof(lhs = rhs) == std::addressof(lcopy) (p. ej., la expresión de asignación produce un lvalue que se refiere al primer operando);
- Después de evaluar a lhs = rhs:
-
lhs
es igual arcopy
, a menos querhs
sea un xvalue no const que se refiere alcopy
(p. ej., la asignación es una asignación de movimiento a sí mismo), - si
rhs
es un glvalue:- Si es un xvalue no const, el objeto al cual se refiere está en un estado válido pero no especificado;
- De otra forma, el objeto al que se refiere no está modificado;
-
[editar] Conservación de la igualdad
Una expresión es conservadora de igualdad si resulta en salidas iguales dadas entradas iguales.
- Las entradas de una expresión consisten en sus operandos.
- Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si es que los hay).
Cada expresión que se requiere sea conservadora de igualdad, se requiere además que sea estable: dos evaluaciones de tal expresión con los mismos objetos de entrada debe tener salidas iguales si no se encuentra alguna modificación interventora de esos objetos de entrada.
A menos que se indique de otra manera, cada expresión utilizada en una expresión-requiere se requiere sea conservadora de igualdad y estable, y la evaluación de la expresión puede solamente modificar sus operandos no constantes. Los operandos que son constantes no deben ser modificados.
[editar] Notas
La asignación no tiene que ser una función total. En particular, si asignar algún objeto x
puede causar que algún otro objeto y
se modifique, entonces es probable que x = y no esté en el dominio de =
. Esto típicamente sucede si el operando derecho es propiedad directamente o indirectamente del operando izquierdo (p. ej., con los punteros inteligentes a nodos en una estructura de datos basada en nodos, o con algo como std::vector<std::any>).
[editar] Véase también
(C++11)(C++11)(C++11) |
Comprueba si un tipo tiene un operador de asignación para un argumento específico Original: checks if a type has a assignment operator for a specific argument The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (plantilla de clase) |