FreeBSD Manual Pages
std::span::span(3) C++ Standard Libary std::span::span(3) NAME std::span::span - std::span::span Synopsis constexpr span() noexcept; (1) (since C++20) template< class It > explicit(extent != std::dynamic_extent) (2) (since C++20) constexpr span( It first, size_type count ); template< class It, class End > explicit(extent != std::dynamic_extent) (3) (since C++20) constexpr span( It first, End last ); template< std::size_t N > constexpr span( std::type_identity_t<element_type> (&arr)[N] ) (4) (since C++20) noexcept; template< class U, std::size_t N > (5) (since C++20) constexpr span( std::array<U, N>& arr ) noexcept; template< class U, std::size_t N > (6) (since C++20) constexpr span( const std::array<U, N>& arr ) noexcept; template< class R > explicit(extent != std::dynamic_extent) (7) (since C++20) constexpr span( R&& range ); explicit(extent != std::dynamic_extent) (8) (since C++26) constexpr span( std::initializer_list<value_type> il ) noexcept; template< class U, std::size_t N > explicit(extent != std::dynamic_extent && N == (9) (since C++20) std::dynamic_extent) constexpr span( const std::span<U, N>& source ) noexcept; constexpr span( const span& other ) noexcept = default; (10) (since C++20) Constructs a span. 1) Constructs an empty span whose data() == nullptr and size() == 0. * This overload participates in overload resolution only if extent == 0 || extent == std::dynamic_extent. 2) Constructs a span that is a view over the range [first, first + count); the resulting span has data() == std::to_address(first) and size() == count. * The behavior is undefined if [first, first + count) is not a valid range, if It does not actually model contiguous_iterator, or if extent != std::dynamic_extent && count != extent. * This overload participates in overload resolution only if * It satisfies contiguous_iterator, * the conversion from std::iter_reference_t<It> to element_type is at most a qualification conversion. 3) Constructs a span that is a view over the range [first, last); the resulting span has data() == std::to_address(first) and size() == last-first. * The behavior is undefined if [first, last) is not a valid range, if It does not actually model contiguous_iterator, if End does not actually model sized_sentinel_for for It, or if extent != std::dynamic_extent && last-first != extent. * This overload participates in overload resolution only if * It satisfies contiguous_iterator, * End satisfies sized_sentinel_for for It, * the conversion from std::iter_reference_t<It> to element_type is at most a qualification conversion, and * std::is_convertible_v<End, std::size_t> is false. 4-6) Constructs a span that is a view over the array arr; the re- sulting span has size() == N and data() == std::data(arr). * These overloads participate in overload resolution only if ex- tent == std::dynamic_extent || N == extent is true and the conversion from std::remove_pointer_t<decltype(data(arr))> to element_type is at most a qualification conversion. 7) Constructs a span that is a view over the range range; the re- sulting span has size() == std::ranges::size(range) and data() == std::ranges::data(range). * The behavior is undefined if R does not actually model contigu- ous_range and sized_range or if R does not model borrowed_range while ele- ment_type is non-const or both extent != dynamic_extent and std::ranges::size(range) != extent are true. * This overload participates in overload resolution only if * R satisfies contiguous_range and sized_range, * either R satisfies borrowed_range or std::is_const_v<ele- ment_type> is true, * std::remove_cvref_t<R> is not a specialization of std::span, * std::remove_cvref_t<R> is not a specialization of std::array, * std::is_array_v<std::remove_cvref_t<R>> is false, and * the conversion from std::ranges::range_reference_t<R> to ele- ment_type is at most a qualification conversion. 8) Constructs a span that is a view over the initializer list il; the resulting span has size() == il.size() and data() == il.begin(). * The behavior is undefined if both extent != dynamic_extent and il.size() != extent are true. * This overload participates in overload resolution only if std::is_const_v<element_type> is true. 9) Converting constructor from another span source; the resulting span has size() == source.size() and data() == source.data(). * The behavior is undefined if both extent != dynamic_extent and source.size() != extent are true. * This overload participates in overload resolution only if at least one of extent == std::dynamic_extent, N == std::dynamic_extent and N == extent is true and the conversion from U to element_type is at most a qualification conversion. 10) Defaulted copy constructor copies the size and data pointer; the resulting span has size() == other.size() and data() == other.data(). Parameters first - iterator to the first element of the sequence count - number of elements in the sequence last - iterator past the last element of the sequence or another sentinel arr - array to construct a view for range - range to construct a view for source - another span to convert from other - another span to copy from Exceptions 2) Throws nothing. 3) Throws what and when last - first throws. 7) Throws what and when std::ranges::size(r) and std::ranges::data(r) throw. Notes Feature-test macro Value Std Fea- ture __cpp_lib_span_initializer_list 202311L (C++26) Constructing std::span from a std::initial- izer_list, (8) Example // Run this code #include <array> #include <iostream> #include <span> #include <vector> void print_span(std::span<const int> s) { for (int n : s) std::cout << n << ' '; std::cout << '\n'; } int main() { int c[]{1, 2, 3}; print_span(c); // constructs from array std::array a{4, 5, 6}; print_span(a); // constructs from std::array std::vector v{7, 8, 9}; print_span(v); // constructs from std::vector #if __cpp_lib_span_initializer_list print_span({0, 1, 2}); // constructs from initializer_list #else print_span({{0, 1, 2}}); // ditto, a workaround #endif } Output: 1 2 3 4 5 6 7 8 9 0 1 2 See also data direct access to the underlying contiguous storage (public member function) size returns the number of elements (public member function) operator= assigns a span (public member function) size ssize returns the size of a container or array (C++17) (function template) (C++20) data obtains the pointer to the underlying array (C++17) (function template) http://cppreference.com 2024.06.10 std::span::span(3)
NAME | Synopsis | Parameters | Exceptions | Notes | Example | Output: | See also
Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::span::span&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>
