cout<<调用它打印的函数的顺序?

以下代码:

myQueue.enqueue('a');
myQueue.enqueue('b');
cout << myQueue.dequeue() << myQueue.dequeue();

在控制台打印ba"

同时:

myQueue.enqueue('a');
myQueue.enqueue('b');
cout << myQueue.dequeue();
cout << myQueue.dequeue();

打印ab"这是为什么?

似乎 cout 首先调用最外层(最接近 ;)的函数并按其方式工作,这是它的行为方式吗?

qzxw123 回答:cout&lt;&lt;调用它打印的函数的顺序?

<< 运算符没有序列点,因此编译器可以自由地评估 dequeue> 功能第一.保证的是第二个 dequeue 调用的结果(按照它在表达式中出现的顺序,不一定是它的计算顺序)是 << 到 << 的第一个结果(如果你明白我在说什么).

因此编译器可以自由地将您的代码翻译成任何类似的东西(伪中间 C++).这并不是一份详尽的清单.

auto tmp2 = myQueue.dequeue();
auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;

auto tmp1 = myQueue.dequeue();
auto tmp2 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
tmp3 << tmp2;

auto tmp1 = myQueue.dequeue();
std::ostream& tmp3 = cout << tmp1;
auto tmp2 = myQueue.dequeue();
tmp3 << tmp2;

这是原始表达式中临时词对应的内容.

cout << myQueue.dequeue() << myQueue.dequeue();
|       |               |    |               |
|       |____ tmp1 _____|    |_____ tmp2 ____|
|                       |
|________ tmp3 _________|

这篇关于cout&lt;&lt;调用它打印的函数的顺序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持前端之家!

本文链接:https://www.f2er.com/3188533.html

大家都在问