阅读所有可能的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[]
在所引用的问题中,Eric Lippert指出使用“最佳类型”,如下所示,但是为什么
int
是最好的可能类型呢?如果我们选择过度设计,为什么不使用long
呢?引用块:
阵列元素的类型通过计算给定具有类型的所有元素的最佳类型(如果有)来推断。 所有元素必须可以隐式转换为该类型。
我猜处理8位或16位数据类型比32位结构更快,例如在使用SIMD时,其中四个
byte
实例可以适合一个int/Int32
的寄存器空间中。 我知道JIT编译器不(广泛地)使用SSE指令,但是这种“到处都用int
”的用法确保当JIT编译器要包含这样的优化时,它将不会帮助太多。能否有人详细说明这些事实,并告诉为什么总是倾向于使用
int
?//编辑// 我并不关心规范,规定没有前缀的文字应被视为
int
。重新phrase一下问题:为什么使用大于所需的数据类型?规范为什么有这个字面的规则?有什么优点,因为巨大的缺点是远离未来(SIMD)优化。