std::ptrdiff_t
提供: cppreference.com
ヘッダ <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_t
は std::size_t の符号付き版としての役割を持ちます。 任意の型の配列のサイズを格納することができ、多くのプラットフォームでは、 std::intptr_t の同義語です。
[編集] 例
Run this code
#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) | |
標準レイアウト型の先頭から指定されたメンバまでのバイトオフセット (関数マクロ) | |
ptrdiff_t の C言語リファレンス
|