decay-copy
来自 cppreference.com
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 是右值则为无操作。
除了 views::all、ranges::take_view 和 ranges::drop_view 之外,标准库中所有对 decay-copy
的使用(见下文)自 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) |
一个 view ,其中包含 range 的所有元素(别名模板) (范围适配器对象) |
(C++20) |
一个 view ,由另一个 view 的前 N 个元素组成(类模板) (范围适配器对象) |
(C++20) |
一个 view ,由另一个 view 的元素组成,跳过前 N 个元素(类模板) (范围适配器对象) |