3

执行这个简单的代码:

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从右到左“提取”的?比 - 它是如何真正工作的(在运行时逐步执行)?

4

1 回答 1

5

根据C++ 标准,函数参数的评估顺序是未指定的。
它可能是:

  • 从左到右或
  • 从右到左或
  • 任何其他订单

我以前的答案之一在这里,深入而详细地解释了这一点。

于 2012-02-27T08:18:53.590 回答