名稱空間
變體
操作

std::ptrdiff_t

來自 cppreference.com
< cpp‎ | 型別
 
 
 
型別支援
基本型別
定寬整數型別 (C++11)
定寬浮點型別 (C++23)
ptrdiff_t
(C++11)    
(C++17)
數值極限
C 數值極限介面
執行時型別資訊
 
定義於標頭檔案 <cstddef>
typedef /*實現定義*/ ptrdiff_t;

std::ptrdiff_t 是兩個指標相減結果的有符號整數型別。

std::ptrdiff_t 的位寬不小於 17。

(C++11 起)

目錄

[編輯] 注意

std::ptrdiff_t 用於指標算術和陣列索引(如果可能出現負值)。使用其他型別(例如 int)的程式可能會在例如 64 位系統上失敗,當索引超過 INT_MAX 或依賴於 32 位模運算時。

在使用 C++ 容器庫時,迭代器之間差異的正確型別是成員 typedef difference_type,它通常與 std::ptrdiff_t 同義。

只有同一陣列的元素指標(包括陣列末尾後一個位置的指標)才能互相相減。

如果一個數組非常大(大於 PTRDIFF_MAX 個元素,但小於 SIZE_MAX 位元組),以至於兩個指標之間的差異可能無法表示為 std::ptrdiff_t,則相減的結果是未定義的。

對於長度小於 PTRDIFF_MAX 的 char 陣列,std::ptrdiff_t 充當 std::size_t 的有符號對應物:它可以儲存任何型別的陣列大小,並且在大多數平臺上,與 std::intptr_t 同義。

std::ptrdiff_t 的宣告是否可在任何其他標準庫標頭檔案中提供是未指定的。即使標準要求使用 std::ptrdiff_t,實現也可以避免引入此名稱。

[編輯] 可能的實現

// valid since 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) [編輯]
標準佈局型別到指定成員的位元組偏移量
(函式宏) [編輯]
C 文件 for ptrdiff_t