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

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

Войти
Регистрация
Восстановить пароль
 
 
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
#1

Странное рекурсивное поведение объекта std::cout - C++

09.02.2013, 17:34. Просмотров 833. Ответов 21
Метки нет (Все метки)

Пытался организовать очередь при помощи шаблона и наткнулся на "странное" поведение:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
// Организация очереди при помощи шаблона
 
#include <iostream>
#include <cstdlib>
 
// По умолчанию тип int, размер 100
template <typename QType = int, int size = 100>
class Queue {
    QType a[size];
    int left, right;
 
    public:
    Queue();
    void qput(QType val);
    QType qget();
};
 
template <typename QType, int size>
Queue<QType, size>::Queue()
{
    left = right = 0;
}
 
template <typename QType, int size>
void Queue<QType, size>::qput(QType val)
{
    if (right == size) {
        std::cout << "Queue is full.\n";
        return; 
    }
    a[++right] = val;
}
 
template <typename QType, int size>
QType Queue<QType, size>::qget()
{
    if (left == right) {
        std::cout << "Queue is empty: ";
        return 0;
    }
    return a[++left];
}
 
int main()
{
    Queue<char> a;
 
    a.qput('e');
    a.qput('n');
    a.qput('g');
    a.qput('l');
    a.qput('i');
    a.qput('s');
    a.qput('h');
 
    std::cout << a.qget();
    std::cout << a.qget();
    std::cout << a.qget();
    std::cout << a.qget();
    std::cout << a.qget();
    std::cout << a.qget();
    std::cout << a.qget() << '\n';
 
    // Now queue is empty
    // another one
    a.qput('e');
    a.qput('n');
    a.qput('g');
    a.qput('l');
    a.qput('i');
    a.qput('s');
    a.qput('h');
 
    std::cout << a.qget() << a.qget() << a.qget() << a.qget()
        << a.qget() << a.qget() << a.qget() << '\n';
 
    return 0;
}
Bash
1
2
3
4
ilyuha21st@coldshoot:~/projects$ ./prog
english
hsilgne
ilyuha21st@coldshoot:~/projects$
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 17:34     Странное рекурсивное поведение объекта std::cout
Посмотрите здесь:

Странное поведение cout после объявления объекта класса - C++
List words; string strg; сin &gt;&gt; strg; сout &lt;&lt; strg; Ничего не выведет, пока в поток вывода не отправится endl или \n. Если...

Странное поведение операции XOR и std::cin - C++
Объясните, пожалуйста, почему этот код работает правильно: /* Обмен значений двух переменных без использования дополнительной переменной...

Объяснить поведение объекта std::cin в цикле while - C++
#include&lt;iostream&gt; #include&lt;string&gt; #include&lt;cstdlib&gt; #include&lt;windows.h&gt; using namespace std; int main(){ char i; char...

Std::cout<<(new class)->something(); - C++
Всем привет. Допустим есть: #include &lt;iostream&gt; class A{ int i; public: A() = default; //-std=c++0x for gcc...

Не могу осилить std::cout - C++
Подскажите плз, почему у меня может не работать cout и std::cout. Пробую в Dev-C++ 5.11 #include &lt;iostream&gt; #include &lt;conio.h&gt; ...

Std::cout и его перегруженный битшифт - C++
Здравствуйте, я пытаюсь понять, почему этот код не пишет в консоль &quot;Hi&quot;. #include &lt;iostream&gt; #include &lt;conio.h&gt; int main() {...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
09.02.2013, 21:30  [ТС]     Странное рекурсивное поведение объекта std::cout #16
Цитата Сообщение от go Посмотреть сообщение
Так с стандарте все есть
Я бы с радостью начал изучать стандарт, но на данном этапе нахожу более полезным почитать какого-нибудь автора. А уж потом, когда большинство аспектов и приёмов дойдут до автоматизма, и обычное чтении книг уже не будет вызывать кокой-либо интерес, тогда уже можно будет начать изучать стандарт. Имхо.
Kastaneda
Форумчанин
Эксперт С++
4514 / 2856 / 228
Регистрация: 12.12.2009
Сообщений: 7,249
Записей в блоге: 1
Завершенные тесты: 1
09.02.2013, 21:52     Странное рекурсивное поведение объекта std::cout #17
Цитата Сообщение от go Посмотреть сообщение
http://liveworkspace.org/code/2jD21P$0
go, а теперь для тех, кто сегодня тупит - в чем разница? Всмысле я вижу, что вывод отличается от предыдущего, но разницы в коде беглым взглядом не вижу.

Добавлено через 6 минут
Аааа, вижу снимаю вопрос.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
09.02.2013, 22:31  [ТС]     Странное рекурсивное поведение объекта std::cout #18
Цитата Сообщение от Kastaneda Посмотреть сообщение
Аааа, вижу снимаю вопрос.
Так поделитесь пожалуйста с другими что вы там заметили, я лично скомпилировал этот код у себя на машине и результат как и прежде.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.02.2013, 22:32     Странное рекурсивное поведение объекта std::cout #19
Цитата Сообщение от Kastaneda Посмотреть сообщение
но разницы в коде беглым взглядом не вижу.
xtorne21st, А ее там нет. Код я скопировал полностью, только компилятор clang поставил.


xtorne21st, из стандарта С++
Цитата Сообщение от C++
The order of evaluation of arguments is unspecified. All side effects of argument expression evaluations take effect before the function is entered. The order of evaluation of the postfix expression and the argument expression list is unspecified.
Иными словами все зависит от компилятора.
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
09.02.2013, 22:36  [ТС]     Странное рекурсивное поведение объекта std::cout #20
единственное в чём разница, так это в компиляторе, clang и gcc с одними и теме же ключами генерирует разный код...

Добавлено через 2 минуты
Цитата Сообщение от go Посмотреть сообщение
The order of evaluation of arguments is unspecified. All side effects of argument expression evaluations take effect before the function is entered. The order of evaluation of the postfix expression and the argument expression list is unspecified.
Это вы с N3242 взяли? Можете указать страничку, пожалуйста

Добавлено через 37 секунд
Цитата Сообщение от go Посмотреть сообщение
Иными словами все зависит от компилятора.
Немножко меня опередили)
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
09.02.2013, 22:54     Странное рекурсивное поведение объекта std::cout #21
Цитата Сообщение от xtorne21st Посмотреть сообщение
Это вы с N3242 взяли?
http://www.open-std.org/jtc1/sc22/wg...2005/n1905.pdf
N1905
5.2.2 8)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.02.2013, 00:47     Странное рекурсивное поведение объекта std::cout
Еще ссылки по теме:

std::cout в CodeBlocks неправильно работает? - C++
Ассоциативность у std::cout должна быть слева направо а этот пример в CodeBlocks доказывает противоположное. Добавляю в конец вектора два...

Почему gcc ругается на std::cout? - C++
Проблема такая: работаю на Mac, установил Xcode, запускаю gcc в командной строке. Имеется элементарная программка: #include...

Вывод адреса по указателю на char в std::cout - C++
Есть такая вот функция. void Char(char type){ char c,*vc=&amp;c; cout&lt;&lt;setw(8); cin&gt;&gt;c; cout&lt;&lt;type &lt;&lt;setw(8)&lt;&lt;c &lt;&lt;setw(11)&lt;&lt;hex&lt;&lt;c ...

Странное поведение в коде - C++
Есть два класса: ArrayList&lt;T&gt; и Array&lt;T&gt; (реализация в конце поста). И есть такой код: ArrayList&lt;int&gt; list = { 1, 2, 3 }; ...


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

Или воспользуйтесь поиском по форуму:
xtorne21st
интересующийся
303 / 274 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
11.02.2013, 00:47  [ТС]     Странное рекурсивное поведение объекта std::cout #22
Цитата Сообщение от Kaimi Посмотреть сообщение
И на экране видим 21.
Идея понятна?
Только после всех разъяснений понятна
Yandex
Объявления
11.02.2013, 00:47     Странное рекурсивное поведение объекта std::cout
Ответ Создать тему
Опции темы

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