是size_t总是无符号的int
Is size_t is always unsigned int
是否有任何实现size_t
定义为unsigned int
以外的其他东西?在我工作的每个系统中,它都被定义为无符号的int,所以我只是好奇。
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型号(
No.但它是无符号整数类型。它不必是特定的 int。
对于C++
http://en.cppreference.com/w/cpp/types/size_t
C++标准章节 18.2.6
类型
size_t
是实现定义的无符号整数类型 它足够大,可以包含任何对象的大小(以字节为单位(。
对于 linux;"Linux 中 c++ size_t在哪里定义"给出了long unsigned int
对于 C
(该问题最初标记为 C 和 C++。
看看这里的答案:
32 位与各种 64 位数据模型的大小 (size_t( 是多少?
绝对不能保证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
不涉及任何算术运算或转换 如果大小太大而无法表示为size_t
,从而推翻了任何认为最大可声明的概念 对象可能太大而无法跨越,即使 C89 中有unsigned long
,或者uintmax_t
在 C9X 中。这也限制了最大元素数 可以在数组中声明,因为对于任何数组a
N
元素
N == sizeof(a)/sizeof(a[0])
因此,对于数组大小,
size_t
也是一种方便的类型,并且在几个库函数中使用。
不,它是无符号整数类型(不是unsigned int
(。来自CPPReference:
std::size_t 是 sizeof 的结果的无符号整数类型 算子
但是你不能确切地说出它的大小是多少,我想这取决于平台。
从 sys/types.h 手册页:
size_t应为无符号整数类型。
所以至少在理论上它可以是一个无符号的short
、int
、long
或long long
。
No. size_t
可以而且确实与unsigned int
不同。
根据C标准6.5.3.4:
两个运算符的结果值都是实现定义的, 并且其类型(无符号整数类型(为
size_t
,定义于<stddef.h>
(和其他标头(。
在 C 标准下,size_t
是未定义的无符号整数类型。
根据开放组(POSIX等(:
64 位和数据大小中立性
。
sizeof(char( <= sizeof(short( <=sizeof(int( <= sizeof(long( = 尺寸(size_t(
简单地说:
size_t
size_t
. 不符合这一点的代码是错误的。
No.我刚刚在 gcc cpp.sh 上运行了这个程序:
#include <iostream>
int main()
{
std::cout << sizeof(unsigned int) << " " << sizeof(unsigned long) << " " << sizeof(size_t) << "n";
}
它产生以下输出:
4 8 8
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 从 std::vector<无符号字符>切片中提取 int?
- 是什么导致了这种使用三进制而不是短整型的有符号int到无符号int转换
- C++无符号短裤的划分导致 int
- 将无符号转换为复杂<int>原因符号转换警告
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 无符号的 int 到有效数字
- C++:使用没有位移位的指针将无符号字符转换为无符号 int
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 有没有办法在C++中将mpz_t转换为 int 或无符号长 int?
- 是否可以将无符号 int 的最大值转换为 int 并将结果转换为 -1?
- 为什么QByteArray的大小是"int"而不是"无符号int"
- 为什么 (-i) 的类型(其中 i 是无符号的 int)仍然是无符号的 int?
- 无符号长整型和无符号 int 之间有什么区别,这 2 种类型应该如何在 c# 中封送?
- 如何对无符号长 int 进行位掩码?
- 使用无符号int作为二进制来在c++中实现一个集
- 这个右移是如何工作的:字符串流>>无符号的int>>无符号的int?
- 转换 int -> 无符号长 长 是否由标准定义
- 为什么在执行 int / 无符号 int 除法时使用 'divl'