суд <<порядок вызова к функциям это печатает?

следующий код:

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", почему это?

Кажется, как будто суд называет наиболее удаленное (самый близкий к;) функционируют сначала и прокладывающий себе путь в, который является способом, которым это ведет себя?

27
задан Jim Lewis 24 January 2010 в 22:53
поделиться

2 ответа

С оператором << нет точки следования, поэтому компилятор может сначала оценить любую из функций dequeue. Гарантируется, что результат второго вызова dequeue (в порядке, в котором он появляется в выражении, а не обязательно в порядке, в котором он вычисляется) будет <<'ed к результату << первого (если вы поняли, о чём я говорю).

Таким образом, компилятор вольен транслировать ваш код в какую-нибудь вещь вроде этой (псевдо-посредник 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 _________|
30
ответ дан 28 November 2019 в 05:26
поделиться

Вызов из Вашего примера:

cout << myQueue.dequeue() << myQueue.dequeue();

переводится в следующее выражение с двумя вызовами оператора оператора<<:

operator<<( operator<<( cout, myQueue.dequeue() ), myQueue.dequeue() );
-------------------- 1
---------2

Порядок оценки cout, myQueue.dequeue() не указан. Однако порядок вызова функции оператора<< хорошо указан, что обозначено с помощью 1 и 2

8
ответ дан 28 November 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: