名前空間
変種
操作

std::ptrdiff_t

提供: cppreference.com
< cpp‎ | types
 
 
 
型サポート
基本的な型
基本型
固定幅の整数型 (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++20)
サポートされている操作
関係と性質の問い合わせ
(C++11)
(C++11)
型変更
(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]