std::span<T,Extent>::span - cppreference.com
提供: cppreference.com
<tbody> </tbody>
|
|
(1) | |
|
|
(2) | |
|
|
(3) | |
|
|
(4) | |
|
|
(5) | |
|
|
(6) | |
|
|
(7) | |
|
|
(8) | |
|
|
(9) | |
|
|
(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) が例外を投げた場合、それを投げます。