память — c ++ получить адрес переменной без оператора & amp;

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

23

Решение

Начиная с C ++ 11, вы можете использовать функцию станд :: AddressOf

31

Другие решения

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

37