Может быть, я не с этой планеты, но мне кажется, что следующее должно быть синтаксической ошибкой:
int a[] = {1,2,}; //extra comma in the end
Но это не так. Я был удивлен, когда этот код был скомпилирован в Visual Studio, но я научился не доверять компилятору MSVC в том, что касается правил C ++, поэтому я проверил стандарт, и он также разрешен стандартом. Если вы мне не верите, вы можете увидеть 8.5.1 с правилами грамматики.
Почему это разрешено? Это может быть глупый бесполезный вопрос, но я хочу, чтобы вы поняли, почему я спрашиваю. Если бы это был частный случай общего правила грамматики, я бы понял - они решили не усложнять общую грамматику, просто запретив повторную запятую в конце списка инициализаторов. Но нет, дополнительная запятая явно разрешена. Например, недопустимо иметь лишнюю запятую в конце списка аргументов вызова функции (когда функция принимает ...
), что нормально .
Итак, опять же, есть ли какая-то конкретная причина, по которой эта избыточная запятая явно разрешена?