std::extents<IndexType,Extents...>::extents

来自cppreference.com
< cpp‎ | container‎ | mdspan‎ | extents
 
 
 
 
 
constexpr extents() = default;
(1) (C++23 起)
template< class OtherIndexType, std::size_t... OtherExtents >

constexpr explicit(/* 见下文 */)

    extents( const std::extents<OtherIndexType, OtherExtents...>& other ) noexcept;
(2) (C++23 起)
template< class... OtherIndexTypes >
constexpr explicit extents( OtherIndexTypes... exts ) noexcept;
(3) (C++23 起)
template< class OtherIndexType, std::size_t N >

constexpr explicit(N != rank_dynamic())

    extents( std::span<OtherIndexType, N> exts ) noexcept;
(4) (C++23 起)
template< class OtherIndexType, std::size_t N >

constexpr explicit(N != rank_dynamic())

    extents( const std::array<OtherIndexType, N>& exts ) noexcept;
(5) (C++23 起)

构造 extents。可以仅从动态尺度构造 extents,它将存储所有的值,也可以所有尺度均具有前条件。

1) 默认构造函数。将所有动态尺度初始化为零。
2) 转换自另一 extents 对象。构造后,*this == othertrue
  • 以下情况下行为未定义:
  • 对于 static_extent(r) 表示静态尺度的任何 r,有 other.extent(r) != static_extent(r),或者
  • 对于 other 中的任何秩值 rother.extent(r) 不能表示为 IndexType 类型的值。
  • 此重载只有在
  • sizeof...(OtherExtents) == rank()true,并且
  • ((OtherExtents == std::dynamic_extent || Extents == std::dynamic_extent ||
      OtherExtents == Extents) && ...)
    true 时才会参与重载决议。
  • 以下情况下,此构造函数为 explicit
3)Nsizeof...(exts),并令 exts_arrstd::array<IndexType, N>{static_cast<IndexType>(std::move(exts))...},此函数等价于 extents(exts_arr)
  • 此重载只有在
  • 以下条件下行为未定义:
  • N != rank_dynamic(),且对于 static_extent(r) 表示静态尺度的任何 rexts_arr[r] 不等于 static_extent(r),或者
  • exts 的某个元素为负值或不能表示为 IndexType 类型的值。
4,5) 如果 N 等于 rank_dynamic(),则对 [0rank_dynamic()) 中的所有 d,以std::as_const(exts[d]) 直接非列表初始化 dynamic-extents[d]。否则,对 [0rank_dynamic()) 中的所有 d,以 std::as_const(exts[dynamic-index-inv(d)]) 直接非列表初始化 dynamic-extents[d]
  • 此重载只有在
  • 以下条件下行为未定义:
  • N != rank_dynamic(),且对于 static_extent(r) 表示静态尺度的任何 rexts[r] 不等于 static_extent(r),或者
  • 对于任何秩索引 rexts[r] 为负值或不能表示为 IndexType 类型的值。

参数

other - 要从之转换的另一 extents
exts - 表示各尺度

示例

参阅