默认情况下,C+中的'int'为'signed long int'+;? >代码> int 默认为C++ >

默认情况下,C+中的'int'为'signed long int'+;? >代码> int 默认为C++ >,c++,types,C++,Types,它是否依赖于平台和/或编译器?如果是,怎么做 [编辑] 以下任何一项是否保证重复 signed short int signed int signed long int signed long long int unsigned short int unsigned int unsigned long int unsigned long long int 普通int是有符号的,无论其大小是否与long int相同,都取决于平台 可以保证的是 sizeof (int) <= sizeof

它是否依赖于平台和/或编译器?如果是,怎么做

[编辑]

以下任何一项是否保证重复

signed short int
signed int
signed long int
signed long long int
unsigned short int
unsigned int
unsigned long int
unsigned long long int

普通
int
是有符号的,无论其大小是否与
long int
相同,都取决于平台

可以保证的是

sizeof (int) <= sizeof (long)

sizeof(int)Plain
int
相当于
signed int
。这是标准的。任何无法保证的过去
int
long
是不同的类型,即使您的特定编译器使它们的大小相同。唯一的保证是
long
至少与
int

一样大
long
short
修饰符与
有符号和
无符号的修饰符不完全相同。后两个可以放在任何整数类型上,但如果您将其禁用,则每个整数类型的默认值为
有符号
(除了
字符
)。所以
int
signed int
是相同的类型


对于
long
short
,如果不选择它们,则两者都不会被选择,但结果类型不同
long int
short int
int
都是不同的类型,默认情况下
short int
signed
int
都与
signed int
相同


默认情况下,“C++”<代码> INT/>代码> <代码> >已签名int >代码>,因此,这是没有问题的。但是,C++中的代码> int 和 long int 是不同的类型,所以从语言的角度来看,这是不一样的。
int
long int
的实现是特定于平台/编译器的-它们都是可能相同的完整类型。C++标准所施加的唯一限制是<>代码> sieOf(long int)> = sieof(int)< /> > .< /p> 所有的整型<强>类型都是不同的,即您可以安全地为所有这些函数重载函数,不会发生任何冲突。但是,有时使用相同数量的位来表示。即使它们使用相同数量的位,有符号和无符号类型也始终具有不同的范围。除了
字符
,使用任何不带
符号的整数类型
等同于将其与
符号
一起使用,即
符号int
int
是等效的
char
signed char
unsigned char
是不同的类型,但是
char
具有与
signed char
unsigned char
相同的表示形式和范围。您可以使用
std::numeric\u limits::is\u signed
来找出它使用的是什么

关于更有趣的方面。以下条件均为真:


  • linux-amd64
    int
    上的
    7有32位,而
    long
    有64位。不同意此说法。“在理想情况下,它并不总是没有歧义和冗余的。”汉斯-让我想起一个来自遥远地方的定义#定义本机INTint@HansPassant:
    class
    vs
    struct
    ?+1,对于其他读者:第一句话中有一个重要的细节:
    int
    signed long int
    永远不是同一类型,但它们可以具有相同的大小。模板参数消失了,因为它们看起来像HTML标记,请使用逐字标记(反勾号)以防止出现这种情况。另外,我很确定您的
    std::numeric_limits::digits
    的保证最小值太高。
    std::numeric_limits::digits>=16
    ,是真的。但是您的答案有符号类型,
    digits
    被指定为“对于整数类型,表示中的非符号位的数量。”