Namespaces
Variants

std::ptrdiff_t

ja.cppreference.net より
< cpp | 型
 
 
ユーティリティライブラリ
言語サポート
型サポート (基本型、RTTI)
ライブラリ機能テストマクロ (C++20)
プログラムユーティリティ
可変長引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

一般ユーティリティ
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)(C++20)(C++20)    
(C++20)
交換 と 型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
共通語彙型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
ヘッダ <cstddef>
typedef /*implementation-defined*/ ptrdiff_t;

std::ptrdiff_t で定義される は、2つのポインタを減算した結果の符号付き整数型です。

のビット幅は17以上です。 std::ptrdiff_t

(C++11 から)

注記

std::ptrdiff_t は、 ポインタ演算 および配列のインデックス指定で、負の値が使用される可能性がある場合に使用されます。 int などの他の型を使用するプログラムは、例えば64ビットシステムでインデックスが INT_MAX を超える場合や、32ビットのモジュラー演算に依存している場合に失敗する可能性があります。

C++コンテナライブラリを使用する際、イテレータ間の差を表す適切な型は、メンバーtypedefである difference_type であり、これはしばしば std::ptrdiff_t と同義です。

同じ配列の要素へのポインタ(配列の終端を1つ超えた位置へのポインタも含む)のみが互いに減算できます。

配列が非常に大きく( PTRDIFF_MAX 要素以上、ただし SIZE_MAX バイト未満)、2つのポインタの差が std::ptrdiff_t として表現できない場合、そのような2つのポインタを減算した結果は未定義です。

char配列が PTRDIFF_MAX より短い場合、 std::ptrdiff_t は std::size_t の符号付き対応物として機能します:あらゆる型の配列のサイズを格納でき、ほとんどのプラットフォームでは std::intptr_t と同義です。

std::ptrdiff_tの宣言が他の標準ライブラリヘッダで利用可能かどうかは未規定です。実装は、規格がstd::ptrdiff_tの使用を要求する場合であっても、この名前を導入しないことを選択できます。

実装例

// C++11以降で有効
using ptrdiff_t = decltype(static_cast<int*>(nullptr) - static_cast<int*>(nullptr));

例

#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;
}

出力:

10 9 8 7 6 5 4 3 2 1

関連項目

sizeof 演算子によって返される符号なし整数型
(typedef)
standard-layout 型の先頭から指定されたメンバーまでのバイトオフセット
(関数マクロ)
Cドキュメント for ptrdiff_t