In this 安德烈·卡尔波夫 (Andrey Karpov) 的博客文章标题为:"About size_t and ptrdiff_t"他举了一个例子,
for (ptrdiff_t i = 0; i < n; i++)
a[i] = 0;
不过不知道对不对,好像应该是这样
for (size_t i = 0; i < n; i++)
a[i] = 0;
它是否正确?
我知道我们也应该使用类似的东西memset
,但让我们完全避免这种情况。我只问类型
In 一篇博文,我认为你应该始终避免分配大于PTRDIFF_MAX
(*),因为这样做会使 Clang 和 GCC 等编译器生成无意义的代码,即使您没有以导致结果溢出的方式减去指向该块的指针。
(*) 即使malloc
当你传递一个大于的值时成功PTRDIFF_MAX
。问题的关键在于,GCC 和 Clang 只能生成在与此类链接时行为正确的代码。malloc
,但是 Glibc 提供了malloc
不实现此限制的函数。
如果您遵循该约束(我鼓励您这样做:这就是博客文章的信息),那么这两种类型都同样正确。
也就是说,由于只需要表示正偏移量,size_t
在你的例子中将是自然的选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)