EDIT: Это синтаксически правовой, но приводит к непредсказуемому поведению, если вы используете x
.
Это не, поскольку вы назначаете неинициализированную переменную другой (ну, той же) неинициализированной переменной. Просто потому, что он компилируется, это не значит, что это законно. Это допустимый синтаксис C++, да, но не законный.
Правая часть оператора присваивания должна быть полностью оценена во время назначения. В этом случае это i
, который не инициализирован.
Кредитов Steve Джессоп, который выкопал цитату:
4,1/1, именующие-к-Rvalue преобразование
[...], если объект не инициализирован, программа что требует преобразования имеет неопределенное поведение.
Для меня это не незаконно, это просто злоупотребление нотами. –
Он оценивает как (i) 'int i' (ii)' i = i' в этом порядке –
Я думаю по той же причине, что только 'int i;' без присвоения 'i' является законным. – asmeurer