88 votes

Y a-t-il un avantage à utiliser le modèle de fonction std::addressof() au lieu d'utiliser l'opérateur & (adresse de) en C++ ?

Si adresse de opérateur & fonctionne bien, alors pourquoi le C++ a introduit addressof() fonction ? Le site & fait partie du C++ depuis le début - pourquoi cette nouvelle fonction est-elle introduite alors ? Offre-t-elle des avantages par rapport à la fonction & opérateur ?

139voto

Baum mit Augen Points 3571

L'unaire operator& peut être surchargé pour les types de classe afin de vous donner autre chose que l'adresse de l'objet, alors que std::addressof() vous donnera toujours son adresse réelle.
Exemple artificiel :

#include <memory>
#include <iostream>

struct A {
    A* operator &() {return nullptr;}
};

int main () {
    A a;
    std::cout << &a << '\n';              // Prints 0
    std::cout << std::addressof(a);       // Prints a's actual address
}

Si vous vous demandez quand cela peut être utile : Quelles sont les raisons légitimes de surcharger l'opérateur unaire& ?

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