命名空间
变体
操作

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 issue 929 的解决方案引入。它最初用于并发支持库中,以确保在按值传递时参数被衰减,后来在范围库中使用。

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

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

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 3724 C++20 decay-copy 未受约束 已受约束

[编辑] 另请参阅

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