У меня есть класс, который перегрузил унарный operator&
. Объекты этого типа были созданы с помощью new
, поэтому адрес переменной был доступен, но теперь мне нужно использовать статический объект. Можно ли получить его адрес?
С++ получить адрес переменной без оператора &
Ответ 1
С С++ 11 вы можете использовать функцию std:: addressof
Ответ 2
В С++ 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
), результирующий указатель будет правильно определен.