在我的C#源代码中,我可能已将整数声明为:
int i = 5;
要么
Int32 i = 5;
在目前流行的32位世界中,它们是等价的.但是,当我们进入64位世界时,我是否正确地说以下内容会变得相同?
int i = 5; Int64 i = 5;
Jon Skeet.. 46
不.C#规范严格定义了这int
是一个System.Int32
具有正好32位的别名.改变这将是一个重大的突破性变化.
不.C#规范严格定义了这int
是一个System.Int32
具有正好32位的别名.改变这将是一个重大的突破性变化.
int
C#中的关键字被定义为System.Int32
类型的别名,这是(通过名称判断)意味着是32位整数.符合规范:
CLI规范部分8.2.2(内置值和引用类型)有一个包含以下内容的表:
System.Int32
- 有符号的32位整数
C#规范部分8.2.1(预定义类型)有一个类似的表:
int
- 32位有符号整数类型
这保证了System.Int32
CLR和int
C#中的所有内容始终都是32位.
sizeof(testInt)会是8吗?
不,sizeof(testInt)是一个错误.testInt是一个局部变量.sizeof运算符需要一个类型作为其参数.这永远不会是8因为它总是会出错.
VS2010将ac#托管整数编译为4字节,即使在64位机器上也是如此.
正确.我注意到C#规范的第18.5.8节定义sizeof(int)
为编译时常量4.也就是说,当你说 sizeof(int)
编译器只是用4替换它时; 就像你在源代码中说"4"一样.
有没有人知道C#中标准的"int"是64/bit的时间是什么时候?
决不.C#规范的4.1.4节规定"int"是"System.Int32"的同义词.
如果你想要的是一个"指针大小的整数",那么使用IntPtr.IntPtr在不同的体系结构上更改其大小.
int
Int32
在所有平台上始终是同义词.
微软将来不太可能改变它,因为它会破坏许多假定int
为32位的现有代码.
我认为你可能会感到困惑的是它int
是一个别名,Int32
所以它总是4个字节,但是IntPtr
假设它与CPU架构的字大小匹配,所以它在32位系统上是4个字节,在8个字节上是8个字节一个64位系统.