美文网首页
连续很很多个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时,发现的问题

    无意中写下了如下代码: 按照正常的读取逻辑,输出应该是a=10, 20\n,然而实际结果并不是想象中的那样,正确答...

  • LeetCode之Longest Valid Parenthes

    问题: 方法:根据题意很容易发现,对"("和")"进行连续计数,当")"数量多于"("数量时子串需结束,如"(()...

  • 发现问题很容易

    发现问题很容易不要怒怼平静对待愤怒问问自己我的东西就没有问题吗静静的把自己事情做好最重要

  • 多个心眼很开心

    那一年四月,我在我们城市的北郊监理一处软基工程。 一个分包商填筑一段一米深的碎石,下面是鱼塘底,这人竟敢最上面只填...

  • 很绝望的发现

    今天看到一张图,描述了双鱼座的性格,我觉得很贴切我,本来还觉得超级神奇有趣。 但认真一想:难道所有的双鱼座都是这种...

  • 当自己发现自己很脆弱时

    今天是2015年11月28日,阳光正好的日子刚过去2天,阴雨连绵又光顾我们的生活。想说杭州是一个温柔的而坚强...

  • 多少年了,我终于鼓足勇气解决表格拆分的问题

    问题:如何将一个Excel表格根据查询条件拆分成多个独立的表格 今天工作时遇到一个很棘手的问题,其实以前也遇到过很...

  • 今天很开心,耶!

    #日更打卡# Day70 《今天很开心,耶》 今天很开心,因为我控制了我的情绪。 连续几场会议,同时多个工作软件有...

  • IOS Masonry+UIScrollView出现的问题

    今天做项目的时候发现一个很懵逼的问题,scrollView有很多个子view,设置了contentSize,在用M...

  • 很私人的问题

    1 我不止一次,可以说很多次,或者每天都被类似的一个问题折磨。之所以说折磨这么严重,完全是因为我在主...

网友评论

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

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