命名空间
变体
操作

decay-copy

出自 cppreference.cn
< 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-copyLWG 问题 929 的决议引入。它最初用于并发支持库中,以确保在按值传递时参数被衰变,后来在范围库中使用。

C++23 中引入的语言特性 auto(x) 也允许创建作为纯右值的衰变副本。唯一的区别是 decay-copy 始终 实体化 value 并生成副本,而 auto(expr) 如果 expr 是纯右值,则不执行任何操作。

标准库中 decay-copy 的所有用法(见下文)除了 views::all, ranges::take_viewranges::drop_view 之外,都已自 C++23 起被 auto(x) 替换。

[编辑] 缺陷报告

以下行为变更的缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布行为 正确行为
LWG 3724 C++20 decay-copy 未受约束 受约束

[编辑] 参见

构造新的 thread 对象
(std::thread 的公共成员函数) [编辑]
构造新的 jthread 对象
(std::jthread 的公共成员函数) [编辑]
(C++11)
异步运行函数(可能在新线程中)并返回将保存结果的 std::future
(函数模板) [编辑]
返回范围起点的迭代器
(定制点对象)[编辑]
返回指示范围终点的哨兵
(定制点对象)[编辑]
返回范围的反向迭代器
(定制点对象)[编辑]
返回范围的反向末尾迭代器
(定制点对象)[编辑]
返回等于范围大小的整数
(定制点对象)[编辑]
获取指向连续范围起点的指针
(定制点对象)[编辑]
一个包含 range 的所有元素的 view
(别名模板) (范围适配器对象)[编辑]
一个由另一个 view 的前 N 个元素组成的 view
(类模板) (范围适配器对象)[编辑]
一个由另一个 view 的元素组成的 view,跳过前 N 个元素
(类模板) (范围适配器对象)[编辑]