Есть ли какое-либо преимущество в использовании шаблона функции std:: addressof() вместо использования оператора & (address of) в С++?
Если оператор address & работает хорошо, то почему С++ ввел функцию addressof()? Оператор & является частью С++ с самого начала - почему эта новая функция введена тогда? Имеет ли он какие-либо преимущества перед оператором C &?
Ответ 1
Унарный operator& может быть перегружен для типов классов, чтобы дать вам нечто иное, кроме адреса объекта, в то время как std::addressof() всегда будет указывать ваш фактический адрес. Продуманный пример:
#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 actual address
}