Non-propagating cache (C++20)
|
template
<
class
T
>
requires
std::
is_object_v
<
T
>
|
(C++20 起)
( 仅用于说明* ) |
|
某些范围适配器如
ranges::join_view
和
ranges::lazy_split_view
会有条件地存储值(例如迭代器),这些值通过仅用于阐述的类模板
non-propagating-cache
来定义。
该包装器的行为与 std:: optional < T > 完全一致,除了:
- 当被复制构造或赋值时,它不会复制源对象的值,
- 当被移出后,它会重置源对象的值,
- 当被赋值时,它会重置自身的值,
- 此外还提供成员函数模板,使得输入视图在迭代过程中能够临时缓存值。
该封装器包含一个存储值的缓存。清除缓存相当于重置所包含值的操作。在复制或移动封装器时会执行此操作。
目录 |
模板参数
| T | - | 所包含值的类型,必须是对象类型 |
成员函数
复制与移动构造函数
|
constexpr
/*non-propagating-cache*/
( const /*non-propagating-cache*/ & ) noexcept { } |
(1) | (since C++20) |
|
constexpr
/*non-propagating-cache*/
( /*non-propagating-cache*/ && other ) noexcept { other. reset ( ) ; } |
(2) | (since C++20) |
复制与移动赋值运算符
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
const
/*non-propagating-cache*/
&
other
)
noexcept
|
(1) | (since C++20) |
|
constexpr
/*non-propagating-cache*/
&
operator
=
(
/*non-propagating-cache*/
&&
other
)
noexcept
|
(2) | (since C++20) |
non-propagating-cache
<T>::
emplace-deref
|
template
<
class
I
>
constexpr T & /*emplace-deref*/ ( const I & i ) ; |
(C++20 起)
( 仅用于说明* ) |
|
通过 直接初始化 (但不包括直接列表初始化)使用 * i 来初始化所含值。如果在调用前 * this 已包含值,则会调用 reset ( ) 。
返回对新所含值的引用。
除非对于某个虚构变量
t
,声明
T t
(
*
i
)
;
是良构的,否则程序非良构。如果
*
i
是可能带有 cv 限定符的
T
类型纯右值,则不要求其可移动。
与 std:: optional 相同的成员
成员函数
构造
optional
对象
(
std::optional<T>
的公开成员函数)
|
|
|
销毁所含值(如果存在)
(
std::optional<T>
的公开成员函数)
|
|
|
赋值内容
(
std::optional<T>
的公开成员函数)
|
|
观察器 |
|
|
访问所含值
(
std::optional<T>
的公开成员函数)
|
|
|
检查对象是否包含值
(
std::optional<T>
的公开成员函数)
|
|
修改器 |
|
|
销毁任何所含值
(
std::optional<T>
的公开成员函数)
|
|
|
原位构造所含值
(
std::optional<T>
的公开成员函数)
|
|
注释
non-propagating-cache
在实现中用于缓存
begin
(
)
的结果,以提供该方法的分摊常数时间复杂度。
参见
|
(C++20)
|
由展平
range
s
的
view
所获得的序列组成的
view
(类模板) (范围适配器对象) |
由展平范围视图并在元素间插入分隔符所获得的序列组成的
view
(类模板) (范围适配器对象) |
|
|
(C++20)
|
通过使用分隔符拆分另一个
view
所获得的子范围组成的
view
(类模板) (范围适配器对象) |
通过使用分隔符拆分另一个
view
所获得的子范围组成的
view
(类模板) (范围适配器对象) |
|
|
(C++23)
|
由另一个
view
元素的
N
大小非重叠连续块组成的
view
s
范围
(类模板) (范围适配器对象) |