数组中的多余逗号

|
void main(){    
  int[3] arr = [1, 2, 3,];    
}
多余的逗号合法吗,还是由于编译器错误而未将其标记为错误?我有许多mixin会在结尾生成带有多余逗号的数组。我想知道是否应该花时间删除它们。 即使这样编译也不会出错:
void main(){    
  int[3] arr = [1, 2, 3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,];    
}
    
已邀请:
我认为这是合法的,以便允许模板(甚至mixin)以通用方式工作:
template Foo(T) { }                       //What if Foo is empty like this?

auto arr = [1, 2, Foo!(int), Foo!(long)];
//         [1, 2, , ]
它使模板更易于使用,因此您不必对特殊输出进行特殊处理。 一个更现实的例子:
template Iota(size_t start, size_t end)  //All integers in range [start, end)
{
    static if (start < end)
        alias TypeTuple!(start, Iota!(start + 1, end)) Iota;
    else
        alias TypeTuple!() Iota;
}

auto arr1 = [-10, Iota!(0, 3)];    // arr is now [-10, 0, 1, 2]
auto arr2 = [-10, Iota!(a, b)];    // arr is now [-10, a .. b]
现在如果
a
等于
b
会发生什么?然后
arr2
衰减到to7ѭ。     
它支持多种语言,以允许代码格式,例如:
string[3] arr = [
    \"Some long String\",
    \"And another\",
    \"etc, etc, etc\",
    ];
不必省略最后一个值的逗号。 Java也允许这样的数组初始化器。     
请检查这篇文章 .NET现在像python一样支持数组中的尾部逗号 许多编译器允许在数组中使用逗号结尾。     
我99%确信单个逗号是设计使然。第二,第三等等?恕我直言,这是设计或实现中的错误,但我不知道是哪一个。     
几个月前,Walter将这种行为提交到dmd中。以前,有时允许使用逗号结尾,有时甚至不允许,并且如果您在dmd1范围内,那么您会被困住。 现在,至少对于dmd2,尾随逗号在数组文字以及参数列表,参数列表和模板参数列表中应始终有效。 但是,多个尾部逗号是实现中的错误。     

要回复问题请先登录注册