使用size_t的C++与使用无符号整数的示例
C++ using size_t vs using an unsigned integer example
我最近看到一个示例,如下所示:
const size_t NDim = 3;
double coords[NDim];
我的问题直截了当。什么时候使用size_t
与int
或unsigned int
?在这种特殊的情况下,下面的不是与上面的等价吗:
const unsigned int NDim = 3;
double coords[NDim];
size_t
通常用于数组索引和循环计数
根据cppreference:
使用其他类型(如unsigned int)进行数组索引的程序可能会失败,例如,当索引超过UINT_MAX或依赖于32位模块算术时,64位系统可能会失败。
它还指出:
std::size_t可以存储理论上可能的任何类型的对象(包括数组)。大小不能为的类型由std::size_t表示的格式不正确(由于C++14)
答案也很简单。您可以使用size_t
来满足所有的数组索引和大小调整需求,这正是它的设计目的。而且你永远不会用其他东西。
除了是一个自文档功能外,它还有另一个重要方面——在许多平台上,sizeof(int)
不等于sizeof(size_t)
。
相关文章:
- 如何打印boost多精度128位无符号整数
- C++模板函数,用于比较任何无符号整数和有符号整数
- 在线程中读取无符号整数时,c++ 位是否以原子方式切换?
- Constexpr 可变参数模板,用于对无符号整数进行重新排序
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 从 std::string 转换为 const 无符号整数
- 迭代器和无符号整数的重载 + 运算符
- C++,概念不适用于无符号整数作为结果类型?
- 在C++中,将无符号整数转换为八进制表示,反之亦然的最佳方法是什么
- 原子式清除无符号整数的最低非零位
- 计算机使用什么方法添加无符号整数
- boost::任何带有结构体和无符号整数
- 添加有符号和无符号整数
- 如何安全地比较两个无符号整数计数器?
- 计算 (64 位无符号整数) * (64 位无符号整数) 的商除以 2^64
- 如何将 32 位无符号整数分配给包含 32 位的位字段
- 如何将以"\0"开头的字符 * 转换为无符号整数?
- *(易失性无符号整数 *) 的含义 0x00 = 0x00;
- 为大无符号整数分配内存的有效方法
- 获取两个无符号整数 C++ 乘积的高 32 位的有效方法