Страницы

Поиск по вопросам

воскресенье, 9 февраля 2020 г.

Разница между addressof и &

#cpp


В чём разница между std::addressof<>(var) и &var?

int var = 42;

std::cout << std::addressof(var);
std::cout << '\n';
std::cout << &var;

    


Ответы

Ответ 1



Разница в том, что унарный оператор & может быть перегружен для класс- или enum-типов, делать что-то постороннее и возвращать что-то, не имеющее никакого отношения к адресу объекта. А std::addressof всегда возвращает именно адрес объекта. Например, при написании шаблонного кода для получения адреса объекта некоего обобщенного типа T следует использовать именно std::addressof, а не унарный & - тем самым вы защитите свой шаблонный код от "неожиданностей". Для int var разницы никакой нет.

Ответ 2



std::addressof нельзя использовать для получения адреса нестатического метода или поля класса.

Комментариев нет:

Отправить комментарий