201 votes

Opérateur d'adresse double en C++ ? (&&)

Je lis le code source de la 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;
}

L'expression "adresse de l'adresse" a-t-elle un sens ? Pourquoi y a-t-il deux opérateurs d'adresse au lieu d'un seul ?

3 votes

C'est peut-être l'adresse d'une référence.

2 votes

@Gabe ; il s'agit d'une déclaration, ce qui en ferait une référence à une référence, ce qui n'a aucun sens puisque la référence elle-même ne peut pas être modifiée. L'adresse-of ne peut être utilisée que dans le code, pas lors de la déclaration (un paramètre comme dans ce cas, ou autre). Je n'ai jamais vu quelque chose comme ça cependant.

5 votes

Même s'il n'y avait qu'un seul & cela n'aurait rien à voir avec l'opérateur address-of, mais signifierait plutôt que __x est une référence.

1voto

Je crois que && est pour sémantique du déplacement . Il permet à quelque chose de céder sa mémoire à quelque chose d'autre qui en a besoin, évitant ainsi la nécessité de la copier.

Constructeur de mouvement Par exemple

String(String&& other) noexcept
{
//...
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X