我看到人们只要意味着无符号整数就会使用size_t
。例如:
class Company {
size_t num_employees_;
// ...
};
这是好习惯吗?有一点是你必须包括<cstddef>
。它应该是unsigned int
吗?或者甚至只是int
?
使用int
听起来对我很有吸引力,因为它避免了像这样的愚蠢错误(因为人们经常使用int
):
for(int i = num_employees_ - 1; i >= 0; --i) {
// do something with employee_[i]
}
答案 0 :(得分:14)
size_t
可能与int
的大小不同。
对于员工人数等等,这种差异通常是无关紧要的;一个人有多少2 ^ 32名员工?但是,如果您使用字段来表示文件大小,那么如果您的文件系统支持64位文件,则需要使用size_t
而不是int
。
请注意,对象大小(由sizeof
获得)的类型为size_t
,而不是int
或unsigned int
;相应地,两个指针之间存在ptrdiff_t
(例如&a[5] - &a[0] == ptrdiff_t(5)
)。
答案 1 :(得分:7)
在许多情况下使用size_t有助于提高可移植性。 size_t并不总是“unsigned int”,但它始终是可以表示给定平台上最大可能对象的大小。例如,某些平台具有16位整数大小,但使用32位指针。在这种情况下,如果你使用unsigned int作为某些东西的大小,你将它限制为65,536字节(或其他元素),即使平台可以处理更大的东西。
在你的例子中,我可能会使用typedef来表示32位或64位无符号整数,而不是使用int或unsigned int或size_t。
答案 2 :(得分:7)
在您的情况下,请勿使用其中任何一种。使用容器和迭代器或创建一个提供迭代器/范围访问的新数据类型(例如员工数据库)。
至于无符号,Bjarne Stroustrup在TCPL中写道:
无符号整数类型非常适合处理存储的用途 作为一个位数组。使用无符号而不是int来获得 再多一点代表正整数几乎从来都不是一件好事 理念。尝试通过声明确保某些值是正数 无符号变量通常会被隐式变为失败 转换规则。
答案 3 :(得分:2)
你总是可以使用像
这样的东西employeeList.size();
或
EmployeeList::size_type i = 0;
或
EmployeeNumber number = employee.getNumber();
我的意思是包含int和其他类型的int,除非它只是一些内部计算或算法。
答案 4 :(得分:1)
答案 5 :(得分:0)
在这种情况下,我会使用unsigned int
或int
。 size_t
似乎主要用于表示数据结构的大小。从概念上讲,虽然员工人数在某些情况下可能是数据结构的大小,但并不一定;它可能只是一个计数。所以我会使用int
,但我可能不会过分强调这一点。
答案 6 :(得分:0)
我不是专业人士,但我只使用size_t
作为内存大小来提高代码的可读性。在其他每种情况下,我都使用unsigned int
(或其他任何东西)。
答案 7 :(得分:0)
我想说,[BindProperty]
public string Product_Name{ get; set; }
不仅用于内存区域的大小,而且还用于索引(例如size_t
循环中的索引变量),一定不是坏C ++风格,因为在C ++参考中,我们看到definitions像这样:
for
(此示例来自标准T& operator[](size_t i) const;
模板类。)
因此,标准运算符旨在用于索引数组的元素,并且其参数的类型恰好是unique_ptr
。
答案 8 :(得分:-1)
在这种情况下,您不希望使用plain int,因为员工数量从不为负,您希望编译器帮助您实施此规则,对吗?