Ce face std::addressof
De obicei adresa unui obiect se ia cu &x. O clasă poate însă redefini operator& să returneze altceva. std::addressof(x) returnează mereu adresa adevărată.
În codul obișnuit &x este suficient. std::addressof se folosește în cod generic (șabloane, containere), care trebuie să funcționeze cu orice tip.
Parametri
| Parametru | Descriere |
|---|---|
obiect |
Obiectul a cărui adresă o vrei. |
Ce returnează
Un pointer T* la obiect.
Exemple
Exemplul 1: O clasă care redefinește operatorul &
Adresele exacte diferă la fiecare rulare, așa că exemplul compară pointerii în loc să-i afișeze.
#include <memory>
#include <print>
struct Ciudat {
int valoare = 5;
Ciudat* operator&() { return nullptr; } // nu face asta în codul tău
};
int main() {
Ciudat c;
Ciudat* p1 = &c;
Ciudat* p2 = std::addressof(c);
std::println("&c este nullptr: {}", p1 == nullptr);
std::println("addressof(c)->valoare: {}", p2->valoare);
}
Rezultat
&c este nullptr: true
addressof(c)->valoare: 5
Greșeli frecvente
- Crezi că
addressofeste necesar peste tot. Pentru tipurile tale obișnuite,&xface același lucru.
Comenzi înrudite
pointeri (*, &): Un pointer este o variabilă care ține adresa altei variabile; prin el poți citi și modifica valoarea de la acea adresă.operator: Definește ce face un operator (+, ==, <<, [], () etc.) pentru tipurile tale, ca obiectele să se folosească la fel de natural ca numerele.std::allocator: Alocatorul implicit al containerelor: rezervă și eliberează memorie brută pentru obiecte de tip T.