decay-copy
来自 cppreference.cn
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 并生成一个副本,而如果 expr 是一个纯右值,则 auto(expr) 是一个空操作。
自 C++23 起,标准库中除了 views::all、ranges::take_view 和 ranges::drop_view 之外的所有 decay-copy
用法都被 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 的元素组成的view ,跳过前N个元素(类模板) (范围适配器对象) |