美文网首页
连续很很多个cout时,发现的问题

连续很很多个cout时,发现的问题

作者: 百工之人 | 来源:发表于2019-05-29 09:26 被阅读0次

    无意中写下了如下代码:

    int a = 10;
    cout << "a = " << a << ", " << (a+=10, a) << endl;
    

    按照正常的读取逻辑,输出应该是a=10, 20\n,然而实际结果并不是想象中的那样,正确答案如图:

    amazing!
    不信? 我再写一个:
    怕了吧

    So,为什么cout是从又向左解析的呢?于是本喵去编呼上找了一下。虽然没找到明确的答案,但是从中受到了启发。


    interesting

    想必聪明的你看到"FFF"的时候就已经知道答案了。于是我也做出了大胆的推测:

    // 这一行的本质上就是一个个'operator<<'函数层层嵌套。
    // ostream & operator<<(ostream & os, const Data &data);
    cout << "a = " << a << ", " << (a+10, a) << endl;
    // 那我们可以写成这个样子。
    operator(operator(operator(operator(...), ", ") , (a+=10, a) ), endl);
    

    并且你需要知道一件事情,函数(大多数编译器是这样的)在执行时,参数的压栈顺序是从右边到左边压入的。
    所以 在输出(a+=10, a)a的时候,(a+=10, a)先压入栈中,a+=10就会先执行,导致第一个a的值也受到影响。

    相关文章

      网友评论

          本文标题:连续很很多个cout时,发现的问题

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