Порядок оценки выражений

Недавно меня смутил следующий фрагмент кода c ++:

#include <cstdio>

int lol(int *k){
  *k +=5;
   return *k;
}

int main(int argc, const char *argv[]){
  int k = 0;
  int w = k + lol(&k);
  printf("%d\n", w);
  return 0;
}

Взгляните на строку:

int w = k + lol(&k);

До сих пор я думал, что это выражение будет вычисляться слева направо : взять текущее значение k (которое перед вызовом функции lol равно 0), а затем добавить его к результату функции lol.Но компилятор доказывает, что я ошибаюсь, значение w равно 10. Даже если я поменяю местами, чтобы сделать it

int w = lol(&k) + k;

результат будет по-прежнему 10. Что я делаю не так?

Tomek

5
задан tomuś 24 November 2011 в 21:20
поделиться