voidify
Материал из cppreference.com
template< class T > constexpr void* voidify( T& obj ) noexcept; // только для пояснения |
(начиная с C++20) | |
Возвращает адрес объекта obj (неявно преобразованный в void*).
Содержание |
[править] Параметры
obj | — | объект, адрес которого будет взят |
[править] Возвращаемое значение
std::addressof(obj)
[править] Примечание
Эта функция только для демонстрации введена в P0896R4. Она используется для описания эффектов алгоритмов неинициализированной памяти, которые создают объекты в неинициализированных областях памяти. Результирующий указатель используется как параметры размещения выражения размещающего new.
Первоначально возвращаемое значение было const_cast<void*>(static_cast<const volatile void*>(std::addressof(obj))), что нарушало константную корректность. Явные приведения были удалены решением LWG проблема 3870, и осталось только неявное преобразование в void*.
[править] Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
LWG 3870 | C++20 | явные приведения нарушали константную корректность | эти приведения удалены |
[править] Смотрите также
копирует диапазон объектов в неинициализированную область памяти (шаблон функции) | |
копирует объект в неинициализированную область памяти, определяемую диапазоном (шаблон функции) | |
(C++17) |
перемещает диапазон объектов в неинициализированную область памяти (шаблон функции) |
создаёт объекты инициализацией по умолчанию в неинициализированной области памяти, определяемой диапазоном (шаблон функции) | |
создаёт объекты инициализацией значением в неинициализированной области памяти, определяемой диапазоном (шаблон функции) | |
(C++20) |
создаёт объект по заданному адресу (шаблон функции) |