Я здесь упускаю что-то простое (приоритет выполнения во время выполнения?) - PullRequest
3 голосов
/ 27 февраля 2012

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

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 Ответ

5 голосов
/ 27 февраля 2012

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

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

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

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