【发布时间】:2010-02-10 19:00:57
【问题描述】:
a) 如何评估数组类型声明 new int[10][]?评估了吗
作为(new int[10])[]
或(new int[10][])
还是……?
b) 我不知道怎么问这个问题:我知道语句 int[][] i = (new int[10])[] 会给我们编译器错误。但是假设编译器不会报错,那么编译器会根据这个语句创建什么样的数组类型呢?
已编辑:
对于未能让我的问题更全面,我深表歉意。这是困扰我的问题之一,我无法在脑海中将这个问题具体化到足以理解它的程度。所以我问了半个问题,希望回复能帮助我。无论如何,这是一个毫无意义的问题,但我仍然想解释一下我的实际意思:
促使这一切发生的原因是 MSDN 上的一篇文章
主表达式分为数组创建表达式和主无数组创建表达式。以这种方式处理数组创建表达式,而不是将其与其他简单的表达式形式一起列出,可以使语法禁止潜在的混淆代码,例如
object o = new int[3][1];
否则会被解释为
object o = (new int[3])[1];
所以这让我想到,也许围绕这个数组创建表达式的不同部分的括号会给编译器关于它应该创建的数组类型的不同指令。
或者换一种说法,我认为编译器在解释数组创建/初始化语法时可能遵循一些内置逻辑(派生自某个数学字段)。换句话说,编译器没有构建一个数组,因为它的开发人员给了它特定的指令,例如“当你看到词 new 和 name of some type 和两对方括号 ([] []),然后按照这些分步说明进行操作,它将详细告诉您该怎么做”,但开发人员只是构建在一些与数学相关的逻辑中,并且从该编译器能够自行派生一个数组,而无需开发人员提供逐步说明。
顺便说一句——我确实了解锯齿状和矩形数组以及它们是如何初始化的等;)
【问题讨论】: