阅读所有可能的C#数组初始化语法我想知道为什么C#总是推断int/Int32
一个较小数据类型的数组,例如byte
或者short
就足够了.
new[] { 30, 130, 230 } // sbyte[] suffices but becomes int[]
new[] { -1, 125, -119 } // sbyte[] suffices but becomes int[]
new[] { -31647, -1337, 23456} // short suffices but becomes int[]
Run Code Online (Sandbox Code Playgroud)
在引用的问题中,Eric Lippert表示使用了"最佳类型" - 见下文,但int
最好的类型是怎样的?如果我们想要矫枉过正,为什么不使用long
呢?
数组元素的类型是通过计算具有类型的所有给定元素的最佳类型(如果有的话)来推断的.所有元素必须可以隐式转换为该类型.
我怀疑处理8位或16位数据类型可能比32位结构更快,例如当使用SIMD时,其中四个byte
实例可以适合一个寄存器空间int/Int32
.我知道JIT编译器没有(广泛地)使用SSE指令,但是" int
无处不在"的这种使用确保了当JIT编译器将包含这样的优化时它将没有多大帮助.
有人可以详细说明这些事实,并告诉它为什么总是采取行动int
?
//编辑//
我真的不关心那些规定没有前缀的文字应该被认为是规范的规范int
.重新解释一下这个问题:
为什么使用的数据类型比需要的大?为什么规范对文字有这个规则? 有什么好处,因为巨大的缺点是远离未来(SIMD)的优化.