std::span<T,Extent>::span
提供: cppreference.com
<tbody>
</tbody>
constexpr span() noexcept; |
(1) | |
constexpr span(pointer ptr, size_type count); |
(2) | |
constexpr span(pointer first, pointer last); |
(3) | |
template <std::size_t N> constexpr span(element_type (&arr)[N]) noexcept; |
(4) | |
template <std::size_t N> constexpr span(std::array<value_type, N>& arr) noexcept; |
(5) | |
template <std::size_t N> constexpr span(const std::array<value_type, N>& arr) noexcept; |
(6) | |
template <class Container> constexpr span(Container& cont); |
(7) | |
template <class Container> constexpr span(const Container& cont); |
(8) | |
template <class U, std::size_t N> constexpr span(const std::span<U, N>& s) noexcept; |
(9) | |
constexpr span(const span& other) noexcept = default; |
(10) | |
span を構築します。
1) 空のスパンを構築します。
data() == nullptr および size() == 0 となります。 このオーバーロードは、extent == 0 || extent == std::dynamic_extent である場合にのみ、オーバーロード解決に参加します。2) 範囲
[ptr, ptr + count) に対するビューとなるスパンを構築します。 結果のスパンは data() == ptr および size() == count となります。 [ptr, ptr + count) が有効な範囲でない場合、または extent != std::dynamic_extent && count != extent の場合、動作は未定義です。3) 範囲
[first, last) に対するビューとなるスパンを構築します。 span(first, last - first) と同等です。4-6) 配列
arr に対するビューとなるスパンを構築します。 結果のスパンは size() == N および data() == std::data(arr) となります。 これらのオーバーロードは、extent == std::dynamic_extent || N == extent が true であり、 std::remove_pointer_t<decltype(std::data(arr))>(*)[] が element_type (*)[] に変換可能である場合にのみ、オーバーロード解決に参加します。7-8) 範囲
[std::data(cont), std::data(cont) + std::size(cont)) に対するビューとなるスパンを構築します。 結果のスパンは size() == std::size(cont) および data() == std::data(cont) となります。 それが有効な範囲でない場合、または extent != std::dynamic_extent && std::size(cont) != extent となる場合、動作は未定義です。
これらのオーバーロードは、
Containerがstd::spanの特殊化でなく、 std::array の特殊化であるか配列型であるstd::data(cont)およびstd::size(cont)がどちらも well-formed であるstd::remove_pointer_t<decltype(std::data(cont))>(*)[]がelement_type (*)[]に変換可能である
9) 別のスパンからの変換コンストラクタ。 結果のスパンは
size() == s.size() および data() == s.data() となります。 このオーバーロードは、extent == std::dynamic_extent || N == extent が true であり、 U (*)[] が element_type (*)[] に変換可能である場合にのみ、オーバーロード解決に参加します。10) デフォルト化されたコピーコンストラクタ。 サイズとデータポインタをコピーします。 結果のスパンは
size() == other.size() および data() == other.data() となります。引数
| ptr, first | - | シーケンスの最初の要素を指すポインタ |
| count | - | シーケンスの要素数 |
| last | - | シーケンスの最後の要素の次のポインタ |
| arr | - | ビューを構築する配列 |
| cont | - | ビューを構築するコンテナ |
| s | - | 変換元の別のスパン |
| other | - | コピー元の別のスパン |
例外
2-3) 例外を投げません。
7-8)
std::size(cont) および std::data(cont) が例外を投げた場合、それを投げます。関連項目
| 要素のシーケンスの先頭を指すポインタを返します (パブリックメンバ関数) | |
| シーケンスの要素数を返します (パブリックメンバ関数) | |
span を代入します (パブリックメンバ関数) | |
(C++17)(C++20) |
コンテナまたは配列のサイズを返します (関数テンプレート) |
(C++17) |
ベースとなる配列を指すポインタを取得します (関数) |