cout 从右向左入栈
之前一直读不懂书上说的 cout
运算顺序为从右向左什么意思。昨天遇到一个问题明白了一些。题意大概是让我们写个 ID
类,ID
类里有个方法是 nextID()
,即返回现在的 id
,再让 id
自增 1(id
初始为 0)。所以我觉得这样写就好。
1 | int nextID() |
在之后的输出中(为了简便,我把空格啥的都删了)
1 | IDSystem x; |
我本来觉得应该输出 0 1 2 3 4 5,但事实却是 2 1 0 5 4 3。
我惊了,我本以为是 Codeblocks 出 Bug 了,重启后结果还是如此。此后,在校队群里问了后才想起知道原来是 cout
从右向左压栈搞的鬼。这样也就不难理解为什么如此了。(也懂了其他一些运算顺序从右向左的道理)
下面给出刁老板找出编译器汇编的代码:
原来 cout
是有栈的。
之后刁老板又测试了如下代码:发现已经解释不通了。孙心乾大佬说一个语句中同时读和写同一个变量算是 ub (undefined behaviour) 吧。