【发布时间】:2013-03-22 07:03:27
【问题描述】:
在我的代码中,我不使用 int 或 unsigned int。我只将 size_t 或 ssize_t 用于便携式。例如:
typedef size_t intc; // (instead of unsigned int)
typedef ssize_t uintc; // (instead of int)
因为strlen、string、vector……都用size_t,所以我一般用size_t。而且我只在ssize_t 可能为负数时使用。
但我发现:
无符号整数类型非常适合将存储视为位数组的用途。 使用 unsigned 而不是 int 来获得更多位来表示正整数几乎不是一个好主意。 通过声明变量 unsigned 来确保某些值是正数的尝试通常会被隐式转换规则所挫败。
在书中The C++ Programming Language。
所以我很困惑。我错了吗?为什么 STL 不遵守书上的建议?
【问题讨论】:
-
size_t在标准库中用于表示尺寸。如果容器的大小可能是负数,那就太奇怪了。接口说明它的行为。我认为这本书假设日常使用,而不是界面 -
@kassak - 不,在这种情况下,无符号类型实际上 is 用于获取该值的一个额外位。委员会的一些成员认为能够拥有大于一半可用内存的
std::vector<char>非常重要。并且引用说“几乎从不”...... -
提名重新打开,因为引用的重复内容没有足够接近这篇文章。
-
将
intc用于unsignedsize_t(正如你所说,'[signed]int' 在评论中,即使它可能更长),以及@987654334 @ for signedssize_t(评论中的'unsigned int')让我感到困惑,因为通常 'u' 代表 unsigned,例如uint32_t是int32_t的 无符号 版本,一个 4 字节整数。 -
致那些标记为重复的人。这绝对不是重复的。问题不在于有符号与无符号,而在于 size_t 与 ssize_t,即“我什么时候应该使用其中一个”?
标签: c++ unsigned signed size-t