std:: ptrdiff_t
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Basic types | |||||||||||||||||||||
| Fixed width integer types (C++11) | |||||||||||||||||||||
| Fixed width floating-point types (C++23) | |||||||||||||||||||||
|
|||||||||||||||||||||
| Numeric limits | |||||||||||||||||||||
| C numeric limits interface | |||||||||||||||||||||
| Runtime type information | |||||||||||||||||||||
|
|||||||||||||||||||||
|
ヘッダーで定義
<cstddef>
|
||
|
typedef
/*implementation-defined*/
ptrdiff_t
;
|
||
std::ptrdiff_t
は2つのポインタの減算結果の符号付き整数型です。
|
|
(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
|
|