Тот факт, что вы решили задать этот вопрос, говорит о том, что стиль не велик.Даже при том, что однострочная версия почти гарантированно † работает, я все равно предпочел бы двухстрочный подход для большей ясности для читателей.
† Сначала я сказал, что это гарантировано, но я отступлю от этого.Изучив соответствующую часть спецификации, я вижу, как языковые юристы будут жаловаться на то, что эта гарантия прямо не указана.(Как указывает Шафик Ягмур, основной активный выпуск 1342 отмечает отсутствие явной гарантии, хотя и с формулировкой, предполагающей, что такая гарантия должна присутствовать.)
Я сделаю только шаг назадк «почти гарантированному», однако, как это строго следует из « Каждый init-декларатор в объявлении анализируется отдельно, как если бы он был в объявлении сам по себе. ».То есть, анализ int a = 0, b = a;
состоит из двух частей: одна, где переменная с именем a
инициализируется как 0
, и другая, где переменная с именем b
инициализируется до значения a
.Если вы действительно храните эти части отдельно, то первая часть должна быть закончена до начала второй части (иначе они не будут такими, как если бы каждая была в объявлении сама по себе), поэтому a
будет иметь значение 0
передb
инициализируется.Я принимаю, что это может быть недостаточно определенно для юристов, изучающих язык, но оно должно быть достаточно для отчета об ошибках компилятора, если есть компилятор, для которого эта строка не работает должным образом.
Мои извинения за то, что нетищем спецификацию раньше.Тег «language-lawyer» отсутствовал при первом ответе.