Збір на FPV для «Птахів Мадяра»

очень простой вопрос по C+

  • Автор теми Автор теми jammer77
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 16.11.2007
Повідом.: 2117
очень простой вопрос по C++

Есть класс который реализует функции очереди.

Код:
#include "stdafx.h"
#include <iostream>
using namespace std;

///////////////////////////////////////////////////////////////////////////////
class Queue
{
	enum {SIZE = 4};
	int head;
	int tile;
	int queue[SIZE];
public:
	Queue():head(0),tile(-1){};
	void push(int i)
	{
		queue[++tile]= i;
	};
	int pop()
	{
		return queue[head++];
	};
};
///////////////////////////////////////////////////////////////////////////////


а теперь собственно говоря вопрос как заставить cout работать каскадно?

Код:
int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, ".1251");
	Queue q1;

	q1.push(1);
	q1.push(2);
	q1.push(3);

	cout<<q1.pop()             //выводит очередь в обратном порядке
		<<q1.pop()
		<<q1.pop()<<endl;


	Queue q2;
	q2.push(1);
	q2.push(2);
	q2.push(3);

	cout<<q2.pop();          // выводит очередь в правильном порядке
	cout<<q2.pop();
	cout<<q2.pop()<<endl;



	system("pause");
	return 0;
}
 
Думаю, что никак. Насколько мне помниться порядок вызовов функций одного уровня
при вызове функций более высокого уровня, тобишь где то вот так f(f1(), f2(), f3()) не определен. Вероятна такая последовательность вызова f2(), f1(), f3(), но как правило либо с лева на право либо с права на лево. Более того, код приведенный тобой еще и потенциально опасен, если функции имеют какое-то внешнее воздействие.
Ну а если коротко, то это классический unbehaviour.
 
Думаю, что никак. Насколько мне помниться порядок вызовов функций одного уровня
при вызове функций более высокого уровня, тобишь где то вот так f(f1(), f2(), f3()) не определен. Вероятна такая последовательность вызова f2(), f1(), f3(), но как правило либо с лева на право либо с права на лево. Более того, код приведенный тобой еще и потенциально опасен, если функции имеют какое-то внешнее воздействие.
Ну а если коротко, то это классический unbehaviour.

Ты умничка. Все верно. А бороться с этим есть один метод. В таких функциях возвращаемый тип делаешь void и ее просто невозможно будет вызвать в выражении.
 
Назад
Зверху Знизу