c++ - 我在这里遗漏了一些简单的东西(运行时执行优先级?)

标签 c++ pointers function-calls operator-precedence side-effects

这个简单代码的执行:

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 吗?比 - 它是如何工作的(在运行时一步一步)?

最佳答案

根据 C++ 标准,函数参数的求值顺序未指定
可能是:

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

我之前的一个回答 here ,对此进行了深入而详细的解释。

关于c++ - 我在这里遗漏了一些简单的东西(运行时执行优先级?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461859/

相关文章:

c - volatile 作为参数标识符

Javascript:从Flash(swfObject)调用javaScript函数?

c++ - 删除和析构函数同时调用时有什么区别?

c++ - 如何在 C++ 中分配 const 成员变量之前验证它的初始化

C++ 字符指针数组 - 无法访问元素

C:检查字符串是否是回文

c++ - 如何加快程序执行速度

c++ - 具有三个不同整数的排序数组,仅通过一次

javascript - 尝试在代码执行中添加延迟(在警报发生之前)

PHP:call_user_func_array:通过引用问题传递