voidify
|
template
<
class
T
>
void * voidify ( T & obj ) noexcept ; |
(
только для демонстрации*
)
(constexpr начиная с C++17) |
|
Возвращает адрес obj (неявно преобразованного в void * ).
Содержание |
Параметры
| obj | - | объект, адрес которого будет взят |
Возвращаемое значение
|
& obj |
(до C++11) |
|
std:: addressof ( obj ) |
(начиная с C++11) |
Примечания
Эта функция только для демонстрации введена P0896R4 . Она используется для описания эффектов алгоритмов неинициализированной памяти , которые конструируют объекты в неинициализированных областях памяти. Результирующий указатель используется как placement-params для размещающего new выражения .
Изначально возвращаемым значением было const_cast < void * > ( static_cast < const volatile void * > ( std:: addressof ( obj ) ) ) , что нарушает константную корректность. Явные приведения были удалены в результате решения LWG issue 3870 , и единственным оставшимся преобразованием является неявное преобразование в void * .
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3870 | C++98 | the explicit casts broke const-correctness | removed these casts |
Смотрите также
|
копирует диапазон объектов в неинициализированную область памяти
(шаблон функции) |
|
|
(C++20)
|
копирует диапазон объектов в неинициализированную область памяти
(функциональный объект алгоритма) |
|
копирует объект в неинициализированную область памяти, определяемую диапазоном
(шаблон функции) |
|
|
(C++20)
|
копирует объект в неинициализированную область памяти, определяемую диапазоном
(функциональный объект алгоритма) |
|
(C++17)
|
перемещает диапазон объектов в неинициализированную область памяти
(шаблон функции) |
|
(C++20)
|
перемещает диапазон объектов в неинициализированную область памяти
(функциональный объект алгоритма) |
|
(C++17)
|
конструирует объекты с помощью
default-initialization
в неинициализированной области памяти, определяемой диапазоном
(шаблон функции) |
|
конструирует объекты с помощью
default-initialization
в неинициализированной области памяти, определяемой диапазоном
(функциональный объект алгоритма) |
|
|
(C++17)
|
конструирует объекты с помощью
value-initialization
в неинициализированной области памяти, определяемой диапазоном
(шаблон функции) |
|
конструирует объекты с помощью
value-initialization
в неинициализированной области памяти, определяемой диапазоном
(функциональный объект алгоритма) |
|
|
(C++20)
|
создает объект по заданному адресу
(шаблон функции) |
|
(C++20)
|
создает объект по заданному адресу
(функциональный объект алгоритма) |