`size_t` 是一个无符号整数类型(unsigned integer type),它的具体大小取决于系统架构: 1. 在不同系统上的大小: ```cpp // 32位系统 size_t = unsigned int // 4字节 (0 到 4,294,967,295) // 64位系统 size_t = unsigned long long // 8字节 (0 到 18,446,744,073,709,551,615) ``` 1. 为什么使用 `size_t`: - 专门用于表示大小、长度、计数等非负值 - 保证能够表示系统中任何对象的大小 - 在不同系统上自动选择合适的大小 1. 常见用法: ```cpp size_t len = str.length(); // 字符串长度 size_t size = vector.size(); // 容器大小 size_t capacity = 1024; // 缓冲区容量 size_t i = 0; // 循环计数器 // 在循环中使用 for (size_t i = 0; i < str.length(); i++) { // ... } ``` 1. 对比其他类型: ```cpp // C++ int // 有符号,通常4字节,-2,147,483,648 到 2,147,483,647 long // 有符号,4或8字节(取决于系统) size_t // 无符号,4或8字节(取决于系统),总是 >= 0 ``` ```java // Java int // 4字节,-2,147,483,648 到 2,147,483,647 long // 8字节,-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 ``` 1. 注意事项: ```cpp // 小心负数! size_t x = 10; x = x - 20; // 危险!会变成一个很大的正数,因为 size_t 是无符号的 // 正确的做法是先检查 if (x >= 20) { x = x - 20; } else { // 处理错误情况 } ``` 所以总结: 1. `size_t` 不是 `long` 也不是 `int`,而是一个独立的无符号类型 2. 它的大小是平台相关的(4或8字节) 3. 它专门用于表示大小和索引 4. 它总是非负的 5. 在 ByteStream 这样的实现中,用 `size_t` 来表示缓冲区大小和读写长度是最合适的