Подтвердить что ты не робот

С++ получить адрес переменной без оператора &

У меня есть класс, который перегрузил унарный operator&. Объекты этого типа были созданы с помощью new, поэтому адрес переменной был доступен, но теперь мне нужно использовать статический объект. Можно ли получить его адрес?

4b9b3361

Ответ 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), результирующий указатель будет правильно определен.