名前空間
変種
操作

std::ptrdiff_t

提供: cppreference.com
< cpp‎ | types
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
型サポート
基本的な型
基本型
固定幅の整数型 (C++11)
ptrdiff_t
(C++17)
数値の限界
C の数値限界インタフェース
実行時型情報
型特性
型カテゴリ
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
型の性質
(C++11)
(C++11)
(C++14)
(C++11)
(C++11)(C++20未満)
(C++11)(C++20で非推奨)
(C++11)
型特性定数
メタ関数
(C++17)
定数評価文脈
サポートされている操作
関係と性質の問い合わせ
型変更
(C++11)(C++11)(C++11)
型変換
(C++11)
(C++11)
(C++17)
(C++11)(C++20未満)(C++17)
 
ヘッダ <cstddef> で定義
typedef /*implementation-defined*/ ptrdiff_t;

std::ptrdiff_t は2つのポインタの減算の結果の符号付き整数型です。

[編集] ノート

std::ptrdiff_t は、負の値を取り得る場合に、ポインタ算術や配列のインデックスのために使用されます。 int などの他の型を使用するプログラムは、例えば64ビットのシステムにおいて、インデックスが INT_MAX を超えるとき、または32ビットの剰余算術をあてにしている場合、失敗するかもしれません。

C++ のコンテナライブラリを使用するとき、イテレータ間の差のための適切な型は、それらのコンテナが提供するメンバ型 difference_type です。 これは通常 std::ptrdiff_t の同義語として定義されます。

同じ配列の要素を指すポインタ (配列の最後の要素の次を指すポインタも含む) だけがお互いに減算することができます。

2つのポインタの差を std::ptrdiff_t で表せないかもしれないくらい配列が大きい (PTRDIFF_MAX 個の要素より大きく、 SIZE_MAX バイトより小さい) 場合、そのような2つのポインタの減算の結果は未定義です。

PTRDIFF_MAX より短い文字配列に対して、 std::ptrdiff_tstd::size_t の符号付き版としての役割を持ちます。 任意の型の配列のサイズを格納することができ、多くのプラットフォームでは、 std::intptr_t の同義語です。

[編集]

#include <cstddef>
#include <iostream>
int main()
{
    const std::size_t N = 100;
    int* a = new int[N];
    int* end = a + N;
    for (std::ptrdiff_t i = N; i > 0; --i)
        std::cout << (*(end - i) = i) << ' ';
    delete[] a;
}


[編集] 関連項目

sizeof 演算子によって返される符号なし整数型
(typedef) [edit]
標準レイアウト型の先頭から指定されたメンバまでのバイトオフセット
(関数マクロ) [edit]