是否有任何将size_t
定义为除unsigned int
以外的其他内容的实现?在我工作的每个系统下,它被定义为unsigned int,所以我只是好奇。
答案 0 :(得分:5)
x86-64和aarch64(arm64)Linux,OS X和iOS都size_t
最终定义为unsigned long
。 (这是LP64模型。这种事情是平台的ABI的一部分,它也定义了诸如函数调用约定之类的东西。其他架构可能会有所不同。)甚至32位x86和ARM体系结构也使用unsigned long
操作系统虽然long
在这些情况下恰好与int
表示相同。
我很确定它在Win64上是unsigned __int64
/ unsigned long long
。 (使用LLP64模型)
答案 1 :(得分:4)
没有。但它是一个无符号的整数类型。它不一定是 int 。
http://en.cppreference.com/w/cpp/types/size_t
C ++标准secton 18.2.6
类型
size_t
是实现定义的无符号整数类型 它足够大,可以包含任何对象的字节大小。
对于linux; “Where is c++ size_t defined in linux”提供long unsigned int
(这个问题最初被标记为C和C ++。)
看看这里的答案:
What's sizeof(size_t) on 32-bit vs the various 64-bit data models?
答案 2 :(得分:2)
不,它是无符号整数类型(不是unsigned int
)。来自CPPReference:
std :: size_t是sizeof结果的无符号整数类型 操作
但你不能确切地说它的大小是什么,我想这取决于平台。
答案 3 :(得分:2)
绝对无保修 size_t
被定义为任何"具体"类型。实际上,如果你想看到一个不是unsigned int
的系统,请参阅我的机器(unsigned long
),以及大多数64位GNU / Linux系统。
从N4296,第18.2.6节:
类型
size_t
是一个实现定义的无符号整数类型,其大小足以包含任何对象的大小字节。
另外,来自N897(理由)6.5.3.4 ......
sizeof
的类型,无论它是什么,都会发布(在库中) 标题<stddef.h>
)为size_t
,因为它对程序员有用 能够参考这种类型。隐含地要求这个要求 将size_t
限制为现有无符号整数的同义词 类型。另请注意,虽然size_t
是无符号类型,但sizeof
不涉及任何算术运算或转换 如果尺寸太大而不能表示为a,则会导致模数行为size_t
,从而消除了最大可申报的概念 即使在C89或{C}中使用unsigned long
,对象也可能太大而无法跨越 C9X中的uintmax_t
。这也限制了元素的最大数量 可以在数组中声明,因为a
的任何数组N
元素,
N == sizeof(a)/sizeof(a[0])
因此
size_t
对于数组大小来说也是一种方便的类型,因此在几个库函数中使用。
答案 4 :(得分:1)
答案 5 :(得分:1)
没有。 ValueAnimator anim = ValueAnimator.ofInt(0, width);
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator valueAnimator) {
viewGroup.setMinimumWidth((Integer) valueAnimator.getAnimatedValue());
}
});
anim.setDuration(duration).start();
可以而且确实与size_t
不同。
两个运算符的结果值是实现定义的, 它的类型(无符号整数类型)是
unsigned int
,定义于size_t
(以及其他标题)。
在C标准下,<stddef.h>
是未定义的无符号整数类型。
64位和数据大小中立
...
sizeof(char)&lt; = sizeof(short)&lt; = sizeof(int)&lt; = sizeof(long)= 的sizeof(为size_t)
简单地说:
size_t
size_t
。不符合规定的代码是错误的。
答案 6 :(得分:0)
没有。我刚刚在cpp.sh上运行了这个程序,这是gcc:
#include <iostream>
int main()
{
std::cout << sizeof(unsigned int) << " " << sizeof(unsigned long) << " " << sizeof(size_t) << "\n";
}
并产生此输出:
4 8 8