#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 нельзя использовать для получения адреса нестатического метода или поля класса.
Комментариев нет:
Отправить комментарий