再谈C/C++中printf与cout的求值顺序和输出,显示顺序问题
经过了大家的谈论与我的思考
现在证明一下的这句说话是错的
“printf函数是从左往右读取,然后将先读取放到栈底,最后读取的放在栈顶,处理时候是从栈顶开始的,所有我们看见的结果是,从右边开始处理的”
先从C出发:
printf("%d, %d\n", a, b);
应该先运算a,再运算b.
b和a在运算的同时会各自入栈,所以b先入栈,在栈底,a跟着入栈,在栈顶
而输出和显示时同一样的,先输出的先显示
根据栈的后进先出原理
a在栈顶,a先输出,a先显示,b在栈底,b后输出,后显示
C++角度:
cout << "a=" << a << '\t' << "b=" << b << endl;
系统在运行cout的一系列“<<”操作符,即插入运算符时,先将各表达式的值
从右往左依次存储到缓冲区——————————这相当于printf的入栈;
当刷新缓冲区时,则按从左到右顺序输出————————这相当于printf的出栈
因为插入运算符的结合性为右结合
C/C++都一致的,即都是先运算b,b入栈(存储进缓冲区),运算a,a入栈(存储进缓冲区)
输出(显示)时,a先出栈(a缓冲区被刷新),b出栈(b缓冲区被刷新)
完毕!
以上是我对C/C++关于printf和cout的运算,输出(显示)的一些理解,不知道正确否