Does int a=1, b=a++;
invoke undefined поведение? Между инициализацией a
и его доступом и модификацией в инициализаторе нет точки последовательности, которая указывает на b
, но, насколько я могу судить, инициализация не является «модификацией» объекта; инициализатор указан, чтобы дать «начальное значение» объекта. Per 6.7.8 Инициализация, пункт 8:Имеет ли int a = 1, b = a ++; вызывать неопределенное поведение?
Инициализатор определяет начальное значение, хранящееся в объекте.
и кажется разумным воспринимать «начальную» как последовательность перед любым доступом к объекту. Рассматривается ли этот вопрос раньше, и есть ли принятая интерпретация?
Я бы сказал, что сноска 97 говорит, что это идентично 'int a = 1; int b = a ++; '. –
@KerrekSB: Сноска 97 в какой версии (или черновике) стандарта? Номера сносок гораздо менее стабильны, чем номера разделов. –
IIRC, в новейших версиях стандарта, концепция «точек последовательности» устаревает. Что касается сносок, то в последнее время обсуждалась сноска, которая определяла порядок обработки конструкции declare-and-initialize, и эта сноска на самом деле кажется довольно старой и стабильной :) – quetzalcoatl