Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::rank

      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>
      struct rank;
      (since C++11)

      IfT is an array type, provides the member constantvalue equal to the number of dimensions of the array. For any other type,value is0.

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

      Contents

      [edit]Helper variable template

      template<class T>
      constexprstd::size_t rank_v= rank<T>::value;
      (since C++17)

      Inherited fromstd::integral_constant

      Member constants

      value
      [static]
      the number of dimensions ofT or zero
      (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>struct rank:publicstd::integral_constant<std::size_t,0>{}; template<class T>struct rank<T[]>:publicstd::integral_constant<std::size_t, rank<T>::value+1>{}; template<class T,std::size_t N>struct rank<T[N]>:publicstd::integral_constant<std::size_t, rank<T>::value+1>{};

      [edit]Example

      Run this code
      #include <type_traits> static_assert(std::rank<int>{}==0);static_assert(std::rank<int[5]>{}==1);static_assert(std::rank<int[5][5]>{}==2);static_assert(std::rank<int[][5][5]>{}==3); int main(){[[maybe_unused]]int ary[][3]={{1,2,3}}; // The rank of reference type, e.g., ary[0], that is int(&)[3], is 0:    static_assert(std::rank_v<decltype(ary[0])>==0);    static_assert(std::is_same_v<decltype(ary[0]),int(&)[3]>); // The solution is to remove the reference type.    static_assert(std::rank_v<std::remove_cvref_t<decltype(ary[0])>>==1);}

      [edit]See also

      (C++11)
      checks if a type is an array type
      (class template)[edit]
      (C++11)
      obtains the size of an array type along a specified dimension
      (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]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/types/rank&oldid=176457"

      [8]ページ先頭

      ©2009-2025 Movatter.jp