Je lis le code source de STL et je n'ai aucune idée de ce que l' &&
opérateur d'adresse est censé faire. Voici un exemple de code tiré de stl_vector.h
:
vector&
operator=(vector&& __x) // <-- Note double ampersands here
{
// NB: DR 675.
this->clear();
this->swap(__x);
return *this;
}
"Adresse d'adresse" at-il un sens? Pourquoi a-t-il deux opérateurs d'adresse au lieu d'un seul?
&
, cela n'aurait rien à voir avec l'opérateur address-of, mais signifierait plutôt qu'il__x
s'agit d'une référence.Réponses:
C'est du code C ++ 11 . En C ++ 11, le
&&
jeton peut être utilisé pour désigner une "référence rvalue".la source
&&
est nouveau dans C ++ 11.int&& a
signifie que "a" est une référence de valeur r.&&
n'est normalement utilisé que pour déclarer un paramètre d'une fonction. Et cela ne prend qu'une expression de valeur r. Si vous ne savez pas ce qu'est une valeur r, l'explication simple est qu'elle n'a pas d'adresse mémoire. Par exemple, le nombre 6 et le caractère «v» sont tous deux des valeurs r.int a
, a est une valeur l, mais(a+2)
est une valeur r. Par exemple:J'espère que c'est informatif.
la source
int&& c = std::move( b );
, etc.&&
est nouveau dans C ++ 11, et cela signifie que la fonction accepte une RValue-Reference - c'est-à-dire une référence à un argument qui est sur le point d'être détruit.la source
Comme d'autres réponses l'ont mentionné, le
&&
jeton dans ce contexte est nouveau pour C ++ 0x (le prochain standard C ++) et représente une «référence rvalue».Les références Rvalue sont l'une des nouveautés les plus importantes de la prochaine norme; ils permettent le support de la sémantique «move» sur les objets et permettent un transfert parfait des appels de fonction.
C'est un sujet assez complexe - l'une des meilleures introductions (qui n'est pas simplement superficielle) est un article de Stephan T. Lavavej, "Références Rvalue : Fonctionnalités C ++ 0x dans VC10, Partie 2"
Notez que l'article est encore assez lourd à lire, mais qu'il en vaut la peine. Et même si c'est sur un blog Microsoft VC ++, toutes (ou presque toutes) les informations sont applicables à n'importe quel compilateur C ++ 0x.
la source
&&
jeton lui-même n'est pas nouveau; sa signification dans les déclarations est. Mais tu le savais.Je pense que c'est un opérateur de déménagement.
operator=
est l'opérateur d'affectation, par exemplevector x = vector y
. L'clear()
appel de fonction sonne comme s'il supprimait le contenu du vecteur pour éviter une fuite de mémoire. L'opérateur renvoie un pointeur vers le nouveau vecteur.Par ici,
Même si nous avons donné des valeurs au vecteur a, le vecteur b a les valeurs. C'est la magie du
operator=()
!MSDN - Comment créer un constructeur de déplacement
la source