Namespaces
Variants

decay-copy

来自 zh.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
(类模板) (范围适配器对象)