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 подскажет развёрнутый ответ в реальном времени.