Я здесь упускаю что-то простое (приоритет выполнения во время выполнения?)

Выполнение этого простого кода:

int  foo(int* a){
    cout <<"a="<<a;
    *a=1;
    cout <<", *a="<<*a<<endl;
    return 0;}

int main () {
    int* ptr;
    ptr=new int[2];
    ptr[0]=0;
    ptr[1]=0;

    cout<< foo(ptr) <<" "<< ptr <<" *ptr="<< *ptr <<endl;
    cout<< foo(ptr) <<" "<< ptr <<" *ptr="<< *ptr <<endl;

    return 0;}

Приводит к (Linux):

a=0x939f008, *a=1
0 0x939f008 *ptr=0
a=0x939f008, *a=1
0 0x939f008 *ptr=1

Пожалуйста, объясните, почему *ptr=0 во второй строке, но не в четвертой; может ли быть так, что "вещи" "извлечены" в cout справа налево? Чем - как это действительно работает (шаг за шагом во время выполнения)?

1 ответ

Решение

Порядок вычисления аргументов функции не определен согласно стандарту C++.
Это может быть:

  • Слева направо или
  • Справа налево или
  • Любой другой заказ

Один из моих предыдущих ответов здесь объясняет это подробно и подробно.

Другие вопросы по тегам