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 ) (隐式转换为退化类型),即 value 的退化纯右值副本。
目录 |
参数
| value | - | 待复制的值 |
返回值
value 的退化副本作为纯右值。
注释
decay-copy
由
LWG issue 929
的解决方案引入。它最初用于
并发支持库
以确保按值传递时参数发生退化,后来被应用于
范围库
。
C++23 引入的语言特性
auto
(
x
)
同样允许以纯右值形式创建退化副本。唯一区别在于:
decay-copy
总是对
value
进行
实质化
并生成副本,而
auto
(
expr
)
在
expr
为纯右值时为空操作。
标准库中除
views::all
、
ranges::take_view
和
ranges::drop_view
外(详见下文),所有
decay-copy
的使用自C++23起均被替换为
auto
(
x
)
。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 3724 | C++20 |
decay-copy
未受约束
|
已受约束 |
参见
构造新的
thread
对象
(
std::thread
的公开成员函数)
|
|
构造新的
jthread
对象
(
std::jthread
的公开成员函数)
|
|
|
(C++11)
|
异步运行函数(可能在新线程中)并返回将保存结果的
std::future
(函数模板) |
|
(C++20)
|
返回指向范围起始的迭代器
(定制点对象) |
|
(C++20)
|
返回指示范围结束的哨兵
(定制点对象) |
|
(C++20)
|
返回指向范围的反向迭代器
(定制点对象) |
|
(C++20)
|
返回指向范围末尾的反向迭代器
(定制点对象) |
|
(C++20)
|
返回等于范围大小的整数
(定制点对象) |
|
(C++20)
|
获取指向连续范围起始的指针
(定制点对象) |
|
(C++20)
|
包含
range
所有元素的
view
(别名模板) (范围适配器对象) |
|
(C++20)
|
由另一个
view
的前 N 个元素组成的
view
(类模板) (范围适配器对象) |
|
(C++20)
|
由另一个
view
的元素组成、跳过前 N 个元素的
view
(类模板) (范围适配器对象) |