Следующий код вызывает UB? - PullRequest
8 голосов
/ 15 января 2010

Следующий код вызывает UB?

int main(){
  volatile int i = 0;
  volatile int* p = &i;
  int j = ++i * *p;
}

Ответы [ 2 ]

9 голосов
/ 15 января 2010

Да - сначала можно оценить ++ i или * p (то есть i).

6 голосов
/ 15 января 2010

Да, это Неопределенное поведение , потому что вы пытаетесь нарушить второе правило ..

Стандарт гласит, что

1) Между предыдущей и следующей точкой последовательности объект должен иметь свое сохраненное значение, измененное не более одного раза при оценке выражения.

2) Кроме того, предварительное значение должно быть доступно только для определения значения, которое будет сохранено .

Примечание : порядок вычисления операндов оператора * равен неопределен , а *p - не что иное, как i.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...