how*_*rks 1 c++ sizeof size-t type-conversion long-integer
将 size_t 转换为 long 有什么缺点吗?因为,我正在编写一个在文件中维护 links_list 的程序。因此,我基于 size_t 遍历到另一个节点,并且还将列表总数记录为 size_t。因此,显然会有一些转换或添加 long 和 size_t。这有什么缺点吗?如果有的话,我会把所有东西都做的一样长,而不是 size_t,甚至是尺寸。请指教。
不幸的是,“长”类型没有很好的理论基础。最初它是在 32 位 unix 端口上引入的,以区别于现有 PDP11 软件假定的 16 位“int”。后来在这些平台上将“int”更改为 32 位(并引入了“short”),并且“long”和“int”成为同义词,它们在很长一段时间内都是同义词。
现在,在 64 位类 Unix 平台(Linux、BSD、OS X、iOS 以及人们可能仍然关心的任何专有 Unix)上,“long”是一个 64 位数量。但是,遗憾的是,不是在 Windows 上:现有头文件中有太多遗留的“代码”导致 sizeof(int)==sizeof(long) 假设,所以他们使用了一个叫做“LLP64”的可憎的东西,留下了 32位。叹。
但是“size_t”不是那样的。它总是意味着一件事:它是在地址空间中存储本机指针大小的无符号类型。如果您有一个需要整数表示(即您需要存储对象的内存大小)的无符号(! - 如果需要有符号算术,请使用 ssize_t 或 ptrdiff_t)指针,这就是您使用的。