int a [] = {1,2,}; Допускаются странные запятые. По какой-то конкретной причине?

Может быть, я не с этой планеты, но мне кажется, что следующее должно быть синтаксической ошибкой:

int a[] = {1,2,}; //extra comma in the end

Но это не так. Я был удивлен, когда этот код был скомпилирован в Visual Studio, но я научился не доверять компилятору MSVC в том, что касается правил C ++, поэтому я проверил стандарт, и он также разрешен стандартом. Если вы мне не верите, вы можете увидеть 8.5.1 с правилами грамматики.

enter image description here

Почему это разрешено? Это может быть глупый бесполезный вопрос, но я хочу, чтобы вы поняли, почему я спрашиваю. Если бы это был частный случай общего правила грамматики, я бы понял - они решили не усложнять общую грамматику, просто запретив повторную запятую в конце списка инициализаторов. Но нет, дополнительная запятая явно разрешена. Например, недопустимо иметь лишнюю запятую в конце списка аргументов вызова функции (когда функция принимает ... ), что нормально .

Итак, опять же, есть ли какая-то конкретная причина, по которой эта избыточная запятая явно разрешена?

325
задан Columbo 30 November 2014 в 14:56
поделиться