Skip to content

整數型別的坑 ​

倒序迴圈 ​

size_t 是 unsigned,i >= 0 永遠成立 → 無窮迴圈:

cpp
for (size_t i = n - 1; i >= 0; --i)  // ❌
for (size_t i = n; i--;)             // ✅ 但不好讀

換成有號型別時:

型別語意來源
ssize_tbyte 數或錯誤值POSIX
std::ptrdiff_t指標相減的結果標準庫,C++20 std::ssize() 回傳

偏好 std::ptrdiff_t(標準、可移植)。

int64_t literal ​

1L、1LL 都不是跨平台的 int64_t(int64_t 在 macOS 是 long long、Linux 是 long),std::min(1L, a) 會因型別不同編不過。

  • ✅ static_cast<int64_t>(1)
  • ✅ 有意義的常數:const int64_t kMin = 1;
  • ❌ INT64_C(1):型別是 int_least64_t,不保證就是 int64_t

參考 ​

頁面歷史

Just observe 👀