Порядок присваивания в списке инициализированных переменных не определен?

Возможный дубликат:
Запятая в списке переменных — это точка последовательности?

Если у меня есть следующий код, запятая действует как обычная точка последовательности, или поведение не определено?

int i = 1, j = i;

Я на самом деле не планирую использовать это (наш внутренний стандарт запрещает даже int i, j), но мне было любопытно, и это оказалось странно сложно Google.

4

Решение

Это четко определено:

8. Заявители: [dcl.decl]

3) Каждый init-декларатор в объявлении анализируется отдельно, как если бы он был в объявлении сам по себе.

И примечание:

90) Объявление с несколькими деклараторами обычно эквивалентно
соответствующая последовательность объявлений, каждая с одним
описатель. То есть

T D1, D2, ... Dn;

обычно эквивалентно

T D1; T D2; ... T Dn;

где T является decl-specier-seq, и каждый Di является
INIT-описатель.

Для полноты (потому что в записке написано обычно):

Исключение возникает, когда имя введено одним из деклараторов.
скрывает имя типа, используемое спецификаторами dcl, чтобы при одинаковом
Спецификаторы dcl используются в последующем объявлении, они не имеют
то же значение, что и в struct S { ... }; S S, T; // объявляем два
экземпляры структуры Swhich is not equivalent tostruct S {…}; S
S; S T; // ошибка`

13

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]