整數型別的坑
倒序迴圈
size_t 是 unsigned,i >= 0 永遠成立 → 無窮迴圈:
cpp
for (size_t i = n - 1; i >= 0; --i) // ❌
for (size_t i = n; i--;) // ✅ 但不好讀換成有號型別時:
| 型別 | 語意 | 來源 |
|---|---|---|
ssize_t | byte 數或錯誤值 | 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