Я знаю, что это выглядит знакомо, но это доведено до меня как проблема в тесте Microsoft, чтобы набирать стажеров. Мне кажется, что y=++y
не соответствует стандарту, но я думаю, что было бы лучше быть уверенным (не уверен, что я лучше тех, кто пишет эти тесты в MS). Поэтому я прошу вашего совета. Считаете ли вы, что подобные выражения соответствуют стандарту и не приводят к неопределенным поведением?`y = ++ y`, соответствует ли этот стандарт? [, который появляется в тесте от Microsoft]
#include <stdio.h>
int main(){
int a = 10;
int b = 10;
a = ++a; //What ???
b = b++; //What ???
printf("%d %d\n",a,b);
return 0;
}
gcc
жалуется на него, когда используется для компиляции с -Wsequence-point
. (Это явно не указано, является ли это C или конкретная проблема C++.)
Но только четыре ответа при условии:
a) 10 10
b) 11 10
c) 10 11
d) 11 11
Хотя один не ограничивается, чтобы выбрать только один ответ (так может быть, я должен выбрать все четыре?)
Ну, на мой взгляд, между самоинструментацией и присваиванием нет точки последовательности. Таким образом, это нарушает спецификацию. Не так ли?
Вы хотите получить ответ в терминах C++ 03 или C++ 11? Они рассуждают по этому поводу по-разному. –
Вы правы. Это неопределенное поведение. – Art
Да, это UB, но я все равно возьму b) как ответ: P –