| std::ptrdiff_t(3) | C++ Standard Libary | std::ptrdiff_t(3) | 
NAME¶
std::ptrdiff_t - std::ptrdiff_t
Synopsis¶
 Defined in header <cstddef>
  
   typedef /*implementation-defined*/ ptrdiff_t;
  
   std::ptrdiff_t is the signed integer type of the result of subtracting two
    pointers.
  
   The bit width of std::ptrdiff_t is not less than 17. (since C++11)
Notes¶
 std::ptrdiff_t is used for pointer arithmetic and array indexing,
    if negative values
  
   are possible. Programs that use other types, such as int, may fail on, e.g.
    64-bit
  
   systems when the index exceeds INT_MAX or if it relies on 32-bit modular
    arithmetic.
  
   When working with the C++ container library, the proper type for the
    difference
  
   between iterators is the member typedef difference_type, which is often
    synonymous
  
   with std::ptrdiff_t.
  
   Only pointers to elements of the same array (including the pointer one past
    the end
  
   of the array) may be subtracted from each other.
  
   If an array is so large (greater than PTRDIFF_MAX elements, but less than
    SIZE_MAX
  
   bytes), that the difference between two pointers may not be representable as
  
   std::ptrdiff_t, the result of subtracting two such pointers is undefined.
  
   For char arrays shorter than PTRDIFF_MAX, std::ptrdiff_t acts as the signed
  
   counterpart of std::size_t: it can store the size of the array of any type
    and is,
  
   on most platforms, synonymous with std::intptr_t.
  
   It is unspecified whether the declaration of std::ptrdiff_t is available in
    any
  
   other standard library header. An implementation may avoid introducing this
    name
  
   even when the standard requires std::ptrdiff_t to be used.
Possible implementation¶
 // valid since C++11
  
   using ptrdiff_t = decltype(static_cast<int*>(nullptr) -
    static_cast<int*>(nullptr));
Example¶
// Run this code
  
   #include <cstddef>
  
   #include <iostream>
  
   int main()
  
   {
  
   const std::size_t N = 10;
  
   int* a = new int[N];
  
   int* end = a + N;
  
   for (std::ptrdiff_t i = N; i > 0; --i)
  
   std::cout << (*(end - i) = i) << ' ';
  
   std::cout << '\n';
  
   delete[] a;
  
   }
Output:¶
10 9 8 7 6 5 4 3 2 1
See also¶
 size_t unsigned integer type returned by the sizeof operator
  
   (typedef)
  
   byte offset from the beginning of a standard-layout type to specified
  
   offsetof member
  
   (function macro)
  
   C documentation for
  
   ptrdiff_t
| 2024.06.10 | http://cppreference.com |