Hardссылки

Что такое std::addressof и зачем он нужен, если есть оператор &?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`std::addressof(x)` гарантированно даёт реальный адрес объекта, даже если `operator&` перегружен (как в std::vector<bool>::reference или proxy-объектах).

struct Proxy {
    Proxy* operator&() { return nullptr; }  // перегружен!
};

Proxy p;
&p;                    // nullptr — перегруженный operator&
std::addressof(p);     // настоящий адрес p

В прикладном коде &x обычно работает. Но в обобщённом коде (контейнеры, аллокаторы), где тип неизвестен, addressof — безопасный выбор.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.