std::ptrdiff_t
來自 cppreference.com
定義於標頭檔案 <cstddef> |
||
typedef /*實現定義*/ ptrdiff_t; |
||
std::ptrdiff_t
是兩個指標相減結果的有符號整數型別。
|
(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
|