Estoy leyendo el código fuente STL y no tengo idea de qué &&
se supone que debe hacer el operador de dirección. Aquí hay un ejemplo de código de stl_vector.h
:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
¿Tiene sentido "Dirección de dirección"? ¿Por qué tiene dos operadores de dirección en lugar de solo uno?
c++
stl
operator-keyword
memory-address
Anarki
fuente
fuente
&
, no tendría nada que ver con la dirección del operador, sino que significa que__x
es una referencia.Respuestas:
Este es el código C ++ 11 . En C ++ 11, el
&&
token puede usarse para significar una "referencia de valor de r".fuente
&&
es nuevo en C ++ 11.int&& a
significa "a" es una referencia de valor r.&&
normalmente solo se usa para declarar un parámetro de una función. Y solo toma una expresión de valor r. Si no sabe qué es un valor r, la explicación simple es que no tiene una dirección de memoria. Por ejemplo, el número 6 y el carácter 'v' son ambos valores r.int a
, a es un valor l, sin embargo,(a+2)
es un valor r. Por ejemplo:Espero que sea informativo.
fuente
int&& c = std::move( b );
, etc.&&
es nuevo en C ++ 11, y significa que la función acepta una referencia RValue , es decir, una referencia a un argumento que está a punto de ser destruido.fuente
Como han mencionado otras respuestas, el
&&
token en este contexto es nuevo en C ++ 0x (el próximo estándar de C ++) y representa una "referencia de valor de r".Las referencias de Rvalue son una de las cosas nuevas más importantes en el próximo estándar; Permiten la compatibilidad con la semántica de 'movimiento' en los objetos y permiten el reenvío perfecto de llamadas a funciones.
Es un tema bastante complejo: una de las mejores introducciones (que no es simplemente superficial) es un artículo de Stephan T. Lavavej, "Referencias de valor: Características de C ++ 0x en VC10, Parte 2"
Tenga en cuenta que el artículo sigue siendo una lectura bastante pesada, pero vale la pena. Y a pesar de que está en un blog de Microsoft VC ++, toda (o casi toda) la información es aplicable a cualquier compilador de C ++ 0x.
fuente
&&
token en sí no es nuevo; su significado en declaraciones es. Pero eso ya lo sabías.Creo que es un operador de movimiento.
operator=
es el operador de asignación, por ejemplovector x = vector y
. Laclear()
llamada a la función suena como si estuviera eliminando el contenido del vector para evitar una pérdida de memoria. El operador devuelve un puntero al nuevo vector.De esta manera,
Aunque le dimos valores al vector a, el vector b tiene los valores. ¡Es la magia del
operator=()
!MSDN - Cómo crear un constructor de movimiento
fuente