小编M. *_*pen的帖子

为什么数组初始化总是求助于int?

阅读所有可能的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)的优化.

c# arrays type-conversion array-initialization

4
推荐指数
1
解决办法
297
查看次数