命名空间
变体
操作

std::indirectly_copyable_storable

来自 cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念和工具
间接可调用概念
通用算法需求
indirectly_copyable_storable
(C++20)  
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
在头文件 <iterator> 中定义
template< class In, class Out >

concept indirectly_copyable_storable =
    std::indirectly_copyable<In, Out> &&
    std::indirectly_writable<Out, std::iter_value_t<In>&> &&
    std::indirectly_writable<Out, const std::iter_value_t<In>&> &&
    std::indirectly_writable<Out, std::iter_value_t<In>&&> &&
    std::indirectly_writable<Out, const std::iter_value_t<In>&&> &&
    std::copyable<std::iter_value_t<In>> &&
    std::constructible_from<std::iter_value_t<In>, std::iter_reference_t<In>> &&

    std::assignable_from<std::iter_value_t<In>&, std::iter_reference_t<In>>;
(自 C++20 起)

indirectly_copyable_storable 概念指定了 indirectly_readable 类型和 indirectly_writable 类型之间的关系。除了 indirectly_copyable 之外,该概念还指定了可以通过中间对象来执行来自 indirectly_readable 类型的复制。

[编辑] 语义要求

InOut 仅在给定类型为 In 的可解引用值 i 时才符合 std::indirectly_copyable_storable<In, Out>

  • 在定义 std::iter_value_t<In> obj(*i); 后,obj 等于先前由 *i 表示的值,并且
  • 如果 std::iter_reference_t<In> 是右值引用类型,则在初始化 obj 后,*i 将置于有效但未指定的状态。

[编辑] 相等性保持

在标准库概念的 requires 表达式 中声明的表达式需要是 相等性保持的(除非另有说明)。

[编辑] 另请参阅

指定值可以从 indirectly_readable 类型复制到 indirectly_writable 类型
(概念) [编辑]
指定值可以从 indirectly_readable 类型移动到 indirectly_writable 类型,并且移动可以通过中间对象执行
(概念) [编辑]