有没有转换为size_t长的任何缺点? 因为,我写在文件中保持linked_list的程序。 所以,我穿越到基于为size_t另一个节点上,我也跟踪列为为size_t的总数。 因此,显然是有一些将要转换或增加长为size_t。 是否有这样任何不利? 如果有那么我将让一切只要而不是为size_t,甚至大小。 请指教。
Answer 1:
现在不是一个问题,但是这取决于在那里你会端口您的应用程序也可能是在未来。 这是因为为size_t被定义为大到足以存储指针偏移,所以如果你有一个64位指针,为size_t将是64位了。 现在,长可以是也可以不是64位,因为在C / C基本类型的大小的规则++给房间一些变型。
但是,如果你将这些值写入文件,你无论如何都要选择特定的大小,所以没有其他选择比转换为长(或很长很长,如果需要的话)。 更重要的是,使用新的具体尺寸,类型,如int32_t之一。
我的建议是:在某处你的文件的文件头,存储你转换的为size_t的类型的sizeof。 通过这样做,如果将来你决定使用一个更大的,你仍然可以支持老的大小。 而对于程序的当前版本中,您可以检查是否大小支持或不,并发出一个错误,如果没有。
Answer 2:
“长”式的,不幸的是,没有一个良好的理论基础。 它最初被引入32个UNIX端口从现有的PDP11软件承担了16位“INT”区别开来。 再后来“INT”改为32位,在这些平台上(和“短”引进)和“长”和“INT”成了同义词,这他们很长一段时间。
现在,在64位的类Unix平台(Linux,BSD系统,OS X,iOS和任何专有Unix人还可能会在意)“长”是一个64位值。 但遗憾的是,没有在Windows上:有在作出的sizeof(int)的==的sizeof(长)假设现有的头太多遗留“代码”,所以他们去与所谓的“LLP64”可憎的,离开长达32位。 叹。
但“为size_t”是不是这样的。 它一直恰恰意味着一两件事:那就是存储地址空间中的本地指针大小无符号的类型。 如果你有一个无符号 - 需要一个整数表示(!使用ssize_t供,或者您需要签署算术ptrdiff_t的)指针(即你需要存储对象的内存大小),这是你用什么。
Answer 3:
有没有转换为size_t长的任何缺点?
理论上长可以比为size_t小。 此外,长签署。 为size_t是无符号。 所以,如果你开始表达相同用他们两个,像编译器G ++会抱怨它。 很多。 理论上,可能导致因签署对无符号的任务意外错误。
显然是有一些将要转换或增加长
我不明白为什么应该是一些转换或除长。 您可以继续使用的size_t所有算术运算。 你可以的typedef为“的ListIndex”或什么,并继续使用它整个代码。 如果混用类型(长,为size_t),G ++ / mignw会唠叨你关于它的死亡。
另外,您也可以选择具有保证尺寸的具体类型。 新的编译器已经cstdint报头包括类型,如uint64_t中(这是非常不可能的,你会遇到文件大于2 ^ 64,例如)。 如果你的编译没有头,它应该是在提升可用。