decay-copy
|
template
<
class
T
>
typename std:: decay < T > :: type decay - copy ( T && value ) ; |
(начиная с C++11)
(до C++20) ( только для демонстрации* ) |
|
|
template
<
class
T
>
requires
std::
convertible_to
<
T,
std::
decay_t
<
T
>>
|
(начиная с C++20)
( только для демонстрации* ) |
|
Возвращает std:: forward < T > ( value ) (неявно преобразованное в decayed-тип), decayed prvalue копию value .
Содержание |
Параметры
| value | - | значение для копирования |
Возвращаемое значение
Распавшаяся копия value как prvalue.
Примечания
decay-copy
был введен в результате решения
LWG issue 929
. Изначально он использовался в
библиотеке поддержки параллелизма
для обеспечения decay аргументов при передаче по значению, а позже стал использоваться в
библиотеке диапазонов
.
Языковая возможность
auto
(
x
)
представленная в C++23 также позволяет создавать decayed-копии как prvalue. Единственное различие заключается в том, что
decay-copy
всегда
материализует
value
и создает копию, тогда как
auto
(
expr
)
является no-op операцией, если
expr
является prvalue.
Все использования
decay-copy
в стандартной библиотеке (см. ниже), за исключением
views::all
,
ranges::take_view
и
ranges::drop_view
, заменены на
auto
(
x
)
начиная с C++23.
Отчеты о дефектах
Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3724 | C++20 |
decay-copy
was not constrained
|
constrained |
Смотрите также
создает новый объект
thread
(публичная функция-член
std::thread
)
|
|
создает новый объект
jthread
(публичная функция-член
std::jthread
)
|
|
|
(C++11)
|
запускает функцию асинхронно (потенциально в новом потоке) и возвращает
std::future
, который будет содержать результат
(шаблон функции) |
|
(C++20)
|
возвращает итератор на начало диапазона
(объект точки настройки) |
|
(C++20)
|
возвращает страж, указывающий на конец диапазона
(объект точки настройки) |
|
(C++20)
|
возвращает обратный итератор на диапазон
(объект точки настройки) |
|
(C++20)
|
возвращает обратный конечный итератор на диапазон
(объект точки настройки) |
|
(C++20)
|
возвращает целое число, равное размеру диапазона
(объект точки настройки) |
|
(C++20)
|
получает указатель на начало непрерывного диапазона
(объект точки настройки) |
|
(C++20)
|
view
, который включает все элементы
range
(псевдоним шаблона) (объект адаптера диапазона) |
|
(C++20)
|
view
, состоящий из первых N элементов другого
view
(шаблон класса) (объект адаптера диапазона) |
|
(C++20)
|
view
, состоящий из элементов другого
view
, пропуская первые N элементов
(шаблон класса) (объект адаптера диапазона) |