Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::extent

      From cppreference.com
      <cpp‎ |types
       
       
      Metaprogramming library
      Type traits
      Type categories
      (C++11)
      (C++11)(DR*)
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      (C++11)
      (C++11) 
      Type properties
      (C++11)
      (C++11)
      (C++14)
      (C++11)(deprecated in C++26)
      (C++11)(until C++20*)
      (C++11)(deprecated in C++20)
      (C++11)
      Type trait constants
      Metafunctions
      (C++17)
      Supported operations
      Relationships and property queries
      Type modifications
      Type transformations
      (C++11)(deprecated in C++23)
      (C++11)(deprecated in C++23)
      (C++11)
      (C++11)(until C++20*)(C++17)

      Compile-time rational arithmetic
      Compile-time integer sequences
       
      Defined in header<type_traits>
      template<class T,unsigned N=0>
      struct extent;
      (since C++11)

      IfT is an array type, provides the member constantvalue equal to the number of elements along theNth dimension of the array, ifN is in[0std::rank<T>::value). For any other type, or ifT is an array of unknown bound along its first dimension andN is0,value is0.

      If the program adds specializations forstd::extent orstd::extent_v(since C++17), the behavior is undefined.

      Contents

      [edit]Helper variable template

      template<class T,unsigned N=0>
      constexprstd::size_t extent_v= extent<T, N>::value;
      (since C++17)

      Inherited fromstd::integral_constant

      Member constants

      value
      [static]
      the number of elements along theNth dimension ofT
      (public static member constant)

      Member functions

      operator std::size_t
      converts the object tostd::size_t, returnsvalue
      (public member function)
      operator()
      (C++14)
      returnsvalue
      (public member function)

      Member types

      Type Definition
      value_typestd::size_t
      typestd::integral_constant<std::size_t, value>

      [edit]Possible implementation

      template<class T,unsigned N=0>struct extent:std::integral_constant<std::size_t,0>{}; template<class T>struct extent<T[],0>:std::integral_constant<std::size_t,0>{}; template<class T,unsigned N>struct extent<T[], N>: std::extent<T, N-1>{}; template<class T,std::size_t I>struct extent<T[I],0>:std::integral_constant<std::size_t, I>{}; template<class T,std::size_t I,unsigned N>struct extent<T[I], N>: std::extent<T, N-1>{};

      [edit]Example

      Run this code
      #include <type_traits> static_assert(    std::extent_v<int[3]>==3&&// default dimension is 0    std::extent_v<int[3],0>==3&&// the same as above    std::extent_v<int[3][4],0>==3&&    std::extent_v<int[3][4],1>==4&&    std::extent_v<int[3][4],2>==0&&    std::extent_v<int[]>==0); int main(){constauto ext= std::extent<int['*']>{};    static_assert(ext==42);// with implicit conversion to std::size_t constint ints[]{1,2,3,4};    static_assert(std::extent_v<decltype(ints)>==4);// array size [[maybe_unused]]int ary[][3]={{1,2,3}}; // ary[0] is of type reference to 'int[3]', so, the extent// cannot be calculated correctly and it returns 0    static_assert(std::is_same_v<decltype(ary[0]),int(&)[3]>);    static_assert(std::extent_v<decltype(ary[0])>==0); // removing reference gives correct extent value 3    static_assert(std::extent_v<std::remove_cvref_t<decltype(ary[0])>>==3);}

      [edit]See also

      (C++11)
      checks if a type is an array type
      (class template)[edit]
      (C++11)
      obtains the number of dimensions of an array type
      (class template)[edit]
      removes one extent from the given array type
      (class template)[edit]
      removes all extents from the given array type
      (class template)[edit]
      (C++23)
      a descriptor of a multidimensional index space of some rank
      (class template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/types/extent&oldid=176424"

      [8]ページ先頭

      ©2009-2025 Movatter.jp