Namespaces
Variants

decay-copy

From cppreference.net
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 issue 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++标准。

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

参见

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