У меня есть класс, который перегружен унарный operator&
, Объекты этого типа были созданы с использованием new
, так что адрес переменной был доступен, но теперь мне нужно использовать статический объект. Можно ли получить его адрес?
Начиная с C ++ 11, вы можете использовать функцию станд :: AddressOf
В C ++ 11 или новее std::addressof(object)
, заявленный <memory>
заголовок.
Исторически это было более гротескно, особенно если вы хотели иметь дело с const
а также volatile
квалификаторы правильно. Одна возможность, используемая реализацией Boost addressof
является
reinterpret_cast<T*>(
&const_cast<char&>(
reinterpret_cast<const volatile char &>(object)))
первое добавление классификаторов при конвертации в char&
чтобы reinterpret_cast
будет работать однако object
были квалифицированы; затем удалить их, чтобы сработало окончательное преобразование; затем, наконец, взяв адрес и преобразовав его в правильный тип. Пока T
имеет те же классификаторы, что и object
(который будет в качестве параметра шаблона выведен из object
), результирующий указатель будет правильно определен.