Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
#1

std::cout в CodeBlocks неправильно работает? - C++

19.08.2013, 11:10. Просмотров 610. Ответов 5
Метки нет (Все метки)

Ассоциативность у std::cout должна быть слева направо а этот пример в CodeBlocks доказывает противоположное.
Добавляю в конец вектора два элемента 1 2. Потом их вывожу. При выводе должно бы получится 2 1 -1, а в результате все наоборот (-1 1 2)

Ведь такого не может быть. Может быть я что не понимаю

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
class Vector
{
private:
    int ar[100];
    int pos;
 
public:
    Vector();
 
    void Push(int value);
    int Pop();
};
 
Vector::Vector()
{
    pos = 0;
 
    for (int i=0; i<100; ++i)
        ar[i] = 0;
}
 
void Vector::Push(int value)
{
    ar[pos] = value;
    pos++;
}
 
int Vector::Pop()
{
    if (pos == 0)
    {
        std::cout << "Vector empty." << std::endl;
        return -1;
    }
 
    return ar[--pos];
}
 
 
int main()
{
    Vector      v;
 
    v.Push(1);      // v: 1
    v.Push(2);      // v:  1 2
 
    std::cout << v.Pop() << " " << v.Pop() << " " << v.Pop() << std::endl;      // -1 1 2
 
    system("pause");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2013, 11:10
Здравствуйте! Я подобрал для вас темы с ответами на вопрос std::cout в CodeBlocks неправильно работает? (C++):

Не работает std::cout || std::cin - C++
#include &quot;Account.h&quot; #include &lt;string&gt; #include &lt;iostream&gt; using std::cout; Account :: Account(int startBalance) { ...

Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream - C++
Здравствуйте! Я хотел начать изучать язык C++. Набрал литературы. Установил Microsoft Visual C++ 2005 Express Edition. Образ диска...

Неправильно работает cout для чисел типа double и float - C++
Здравствуйте. Скажите, почему эта программа выводит на экран число 2, а не 2.5 ? #include &lt;iostream.h&gt; int main() { double...

В чем разница std::cout и просто cout? - C++
Ребят ,подскажите на простом языке для чайников . В чем разница std::cout и просто cout?

Операция std::cout для Объекта типа std::string - C++
Кто детально объяснит почему не выводит ? Дает вот так &quot;Отсутствует оператор &quot;&lt;&lt;&quot;, соответствующий этим операндам&quot; void...

что использовать std::cout или просто using namespace std? - C++
Приветствую! Сейчас учу С++, постигаю азы так сказать. В арсенале две книги - Джефф Кент, &quot;Основы программирования &quot; и Х.М....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 11:22 #2
На самом деле, порядок вычисления аргументов не определен стандартом, поэтому он может быть каким угодно, в принципе, в зависимости от компилятора. Это обычный пример unspecified behaviour.
0
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
19.08.2013, 11:35  [ТС] #3
fasked, тогда получается, лучше не использовать вот такое:
C++
1
cout << 1 << 2 << 3;
?
а я всегда думал что должно выводится слева направо)
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
19.08.2013, 11:48 #4
Цитата Сообщение от BigLow Посмотреть сообщение
тогда получается, лучше не использовать вот такое
Здесь как раз таки все вполне определено и корректно, потому что значения аргументов - константы - они заранее вычислены. В первом же примере каждый аргумент не вычислен заранее. То есть, если его переписать следующим образом:
C++
1
2
3
4
int a = v.Pop();
int b = v.Pop();
int c = v.Pop();
std::cout << a << " " << b << " " << c) << std::endl;
То порядок вывода будет именно a-b-c. Опять же, потому что значения аргументов вычислены заранее. Точнее будет сказать, что вычисление аргументов не зависит от порядка. Не стоит путать порядок вывода в консоль и порядка вычисления аргументов оператора/функции.

Еще один пример:
C++
1
2
3
4
int foo() { return 1; }
int bar() { return 2; }
 
std::cout << foo() << bar();
Нельзя точно сказать, какая именно функция (foo или bar) будет вызвана первой, а какая второй. Но зато точно можно сказать, что на консоль будет выведено именно "12".
1
BigLow
55 / 55 / 2
Регистрация: 07.07.2013
Сообщений: 345
19.08.2013, 13:43  [ТС] #5
fasked, спасибо
репутацию пока не могу добавить. за последние 24 часа слишком много кому понаставил плюсиков ))
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.08.2013, 15:15 #6
На эту тему: Точки следования (sequence points)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.08.2013, 15:15
Привет! Вот еще темы с ответами:

Стандартный поток и STL (std::copy to std::cout) - C++
#include &lt;iostream&gt; #include &lt;sstream&gt; #include &lt;algorithm&gt; #include &lt;functional&gt; #include &lt;string&gt; using namespace std; ...

Ошибка в std::cout<<std::endl - C++
есть следующая задача: -создать класс множество целых чисел. перегрузить операторы для следующих операций: Ввода/вывода, объединения двух...

cout vs. std::cout - C++
всем доброго времени суток. начал самостоятельно изучать c++. скачал в сети много разныx умныx книжек.. обнаружил в примераx кода...

std::endl; и std::cout"/n"; - одно и то же? - C++
Весь вопрос в теме.... std::endl; и std::cout&lt;&lt;&quot;/n&quot;; - одно и то же?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.08.2013, 15:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru