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 问题 929 的决议引入。它最初用于并发支持库中,以确保在按值传递时参数被衰变,后来在范围库中使用。
C++23 中引入的语言特性 auto(x) 也允许创建作为纯右值的衰变副本。唯一的区别是 decay-copy
始终 实体化 value 并生成副本,而 auto(expr) 如果 expr 是纯右值,则不执行任何操作。
标准库中 decay-copy
的所有用法(见下文)除了 views::all, ranges::take_view 和 ranges::drop_view 之外,都已自 C++23 起被 auto(x) 替换。
[编辑] 缺陷报告
以下行为变更的缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
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 个元素(类模板) (范围适配器对象) |