命名空间
变体
操作

decay-copy

来自 cppreference.com
< cpp‎ | 标准库
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>>
constexpr std::decay_t<T> decay-copy( T&& value )

    noexcept(std::is_nothrow_convertible_v<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::allranges::take_viewranges::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
(函数模板) [编辑]
返回指向范围开头的迭代器
(自定义点对象)[编辑]
返回指示范围结尾的哨兵
(自定义点对象)[编辑]
返回指向范围的逆向迭代器
(自定义点对象)[编辑]
返回指向范围的逆向结尾迭代器
(自定义点对象)[编辑]
返回等于范围大小的整数
(自定义点对象)[编辑]
获取指向连续范围开头的指针
(自定义点对象)[编辑]
一个 view,其中包含 range 的所有元素
(别名模板) (范围适配器对象)[编辑]
一个 view,由另一个 view 的前 N 个元素组成
(类模板) (范围适配器对象)[编辑]
一个 view,由另一个 view 的元素组成,跳过前 N 个元素
(类模板) (范围适配器对象)[编辑]