美文网首页
函数参数入栈与求值顺序

函数参数入栈与求值顺序

作者: downdemo | 来源:发表于2018-03-27 11:22 被阅读19次
    • 入栈顺序为从右往左
    #include <iostream>
    using namespace std;
    
    int f1(){ cout << 1; return 1; }
    int f2(){ cout << 2; return 2; }
    int f3(){ cout << 3; return 3; }
    void f(int, int, int){}
    
    int main()
    {
        f(f1(), f2(), f3());
    }
    // 打印结果为:321
    
    • C++标准没有明确规定求值顺序
    #include <iostream>
    int main()
    {
        int a = 1;
        std::cout << a++ << ++a << a;
    }
    // 如果按照从右到左顺序,应当打印221,打印结束后a为3
    // 但实际打印结果为:233
    
    • 实际上,入栈前会先把参数列表中的表达式计算出结果再入栈。后自增时,编译器会开辟一个缓冲区来保存当前值再自增,取值时从缓冲区取
    #include <iostream>
    int main()
    {
        int a = 1;
        std::cout << a++ << ++a << a << a++;
    }
    // 打印结果为:3441
    // 最后的a在寄存器中保存1,第一个a在寄存器中保存3
    

    相关文章

      网友评论

          本文标题:函数参数入栈与求值顺序

          本文链接:https://www.haomeiwen.com/subject/blvjcftx.html