Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      deduction guides forstd::span

      From cppreference.com
      <cpp‎ |container‎ |span
       
       
       
       
      Defined in header<span>
      (1)
      template<class It,class EndOrSize>
      span( It, EndOrSize)-> span<std::remove_reference_t<std::iter_reference_t<It>>>;
      (since C++20)
      (until C++26)
      template<class It,class EndOrSize>

      span( It, EndOrSize)-> span<std::remove_reference_t<std::iter_reference_t<It>>,

                                   /*maybe-static-ext*/<EndOrSize>>;
      (since C++26)
      template<class T,std::size_t N>
      span( T(&)[N])-> span<T, N>;
      (2)(since C++20)
      template<class T,std::size_t N>
      span(std::array<T, N>&)-> span<T, N>;
      (3)(since C++20)
      template<class T,std::size_t N>
      span(conststd::array<T, N>&)-> span<const T, N>;
      (4)(since C++20)
      template<class R>
      span( R&&)-> span<std::remove_reference_t<std::ranges::range_reference_t<R>>>;
      (5)(since C++20)

      The followingdeduction guides are provided forspan.

      1) Allows the element type to be deduced from the iterator-sentinel pair.It also allows the static extent to be deduced ifEndOrSize satisfiesintegral-constant-like.(since C++26). This overload participates in overload resolution only ifIt satisfiescontiguous_iterator.
      2-4) Allows the static extent to be deduced from built-in arrays andstd::array.
      5) Allows the element type to be deduced from ranges. This overload participates in overload resolution only ifR satisfiescontiguous_range.

      [edit]Example

      Run this code
      #include <array>#include <cstddef>#include <iomanip>#include <iostream>#include <span>#include <string_view>#include <vector> void print(std::string_view rem="",std::size_t size_of=0,std::size_t extent=0){if(rem.empty()){std::cout<<"name │ sizeof │ extent\n""─────┼────────┼────────\n";return;}std::cout<<std::setw(4)<< rem<<" │ "<<std::setw(6)<< size_of<<" │ ";if(extent==std::dynamic_extent)std::cout<<"dynamic";elsestd::cout<< extent;std::cout<<'\n';} int main(){int a[]{1,2,3,4,5};     print();std::span s1{std::begin(a),std::end(a)};// guide (1)    print("s1", sizeof s1, s1.extent); std::span s2{std::begin(a),3};// guide (1)    print("s2", sizeof s2, s2.extent); #if __cplusplus > 202302Lstd::span s3{std::begin(a),std::integral_constant<std::size_t,2>{}};// guide (1)    print("s3", sizeof s3, s3.extent);#endif // C++26 std::span s4{a};// guide (2)    print("s4", sizeof s4, s4.extent); std::span<int> s5{a};// does not use a guide, makes a dynamic span    print("s5", sizeof s5, s5.extent); std::array arr{6,7,8};std::span s6{arr};// guide (3)    print("s6", sizeof s6, s6.extent);    s6[0]=42;// OK, element_type is 'int' conststd::array arr2{9,10,11};std::span s7{arr2};// guide (4)    print("s7", sizeof s7, s7.extent);// s7[0] = 42; // Error: element_type is 'const int' std::vector v{66,69,99};std::span s8{v};// guide (5)    print("s8", sizeof s8, s8.extent);}

      Possible output:

      name │ sizeof │ extent─────┼────────┼────────  s1 │     16 │ dynamic  s2 │     16 │ dynamic  s3 │      8 │ 2  s4 │      8 │ 5  s5 │     16 │ dynamic  s6 │      8 │ 3  s7 │      8 │ 3  s8 │     16 │ dynamic
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/span/deduction_guides&oldid=171290"

      [8]ページ先頭

      ©2009-2025 Movatter.jp