Это «int i = x ++, j = x ++;» законно?

Думаю, название довольно ясно. Я не совсем уверен в этом, и я не могу найти хороший ответ через Google (увы, я не привержен изящному искусству стандартов-фу), поэтому я спрашиваю:

int i = x++, j = x++;

Это определено? Я совершенно уверен, что i = x ++, j = x ++; как нормальный оператор будет неопределенным поведением - это оператор запятой, который является точкой последовательности и был бы допустимым, но не source совершенно ясно, заканчивается ли инициализатор точкой с запятой или после того, как начинается объявление следующей переменной, и, поскольку это не используемый оператор запятой, я не могу найти четкого ответа. Итак, либо а) запятая завершает инициализатор, является точкой последовательности, и это работает, либо б) нет. Что это такое?

И чтобы исключить, я знаю, что я должен упростить головную боль и просто написать это как:

int i = x++;
int j = x++;

И гарантировать, что это определено. Я прошу большего из любопытства.

5
задан Jonathan Leffler 31 October 2010 в 03:48
поделиться