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 ?
Réponse
Trop de publicités?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& ?