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

141
05 апреля 2019, 17:40

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

int var = 42;
std::cout << std::addressof(var);
std::cout << '\n';
std::cout << &var;
Answer 1

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

Для int var разницы никакой нет.

Answer 2

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

READ ALSO
Почему не считывается файл?

Почему не считывается файл?

Есть файл со следующим содержанием текста:

195
Удаление пустых строк в конце текстового файла Java

Удаление пустых строк в конце текстового файла Java

Нужно было реализовать логику для замены строки в текстовом файлеПрименял разные схемы, но остановился на самом лаконичном, как мне кажется:

125
Метод не может распарсить дату

Метод не может распарсить дату

Вот собственно код дата прилетает формата 05 ноя 18, 20:51 В среде всё работает, но когда я компилирую файл и запускаю его через командную строку,...

144
Массив. Сортировка

Массив. Сортировка

Нужно создать класс со статическим методом, для сортировки массиваНапример по маршруту

142