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