![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| nikitao |
|
||||||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Добрый <время суток>Вот программа:
Здесь реализуется связный список с помощью создания шаблона(это не суть дела). Лично я перед компиляцией ожидал увидеть в окне такую строку "30 239 566" но увидел: "566 239 30" Почему так произходит до меня не доходит. Если прописать вместо
строку
или
То все работает нормально.Пыталя посмотреть в отладки:поставил точку останова и посмотрел выдаваемое значание в ochered::vivod();.Все выдает нормально ,а в окне глюк такой. Зарание спасибо. -------------------- Жизнь - печальная штука. |
||||||||
|
|||||||||
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Инструкция:
трансформируется в:
если нигде не опечатался. Но суть в том что компилятору разрешается производить вычисления своих аргументов в любом порядке - т.н. неспецифицированное поведение. Кроме того здесь судя по всему вступает в действие правило о разделении модификаций объекта точками следования. У тебя получается аж три модификации объекта и ни одной точки следования между ними. - Это приводит к неопределенному поведению, например MSVC 7.1 выдает полный бред. Добавлено @ 22:01 А вообще что ты реализуешь? Очередь или двусвязный список? И какой компилятор? Ты после выделения памяти проверяешь на ноль. Вообще-то компилятор должен бросать исключение, хотя старые действительно возвращают ноль... --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| nikitao |
|
||||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Реализую я очередь,но это не важно.IDE C++BuilderX v 1.0 а компелятор Borland Win32. Вобще ,как я понял надо быть осторожнее с выводом.
Пока еще не научился обрабатывать исключения,поэтому по старинке проверяю(вроде все работает). LPBOY,спасибо. ЗЫ А что такое точка следования??? Это сообщение отредактировал(а) nikitao - 1.10.2005, 22:31 -------------------- Жизнь - печальная штука. |
||||
|
|||||
| bilbobagginz |
|
|||
![]() Naughtius Maximus ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8813 Регистрация: 2.3.2004 Где: Israel Репутация: 3 Всего: 317 |
выкури man fflush
пока. -------------------- Я ещё не демон. Я только учусь. |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
В общем правило такое: если несколько раз модифицируешь одну и ту же переменную (в твоем примере функция vivod каждый раз модифицирует ob1), то модификации должны отделяться точками следования. Точки следования это:
- точка с запятой - оператор запятая - оператор ?: - операторы && и || - а также перед началом выполнения некоторой функции и в самом конце ее выполнения В твоем примере можно испольовать точку с запятой, т.е. как ты сам сказал:
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| LPBOY |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Это я тебе рассказал - почему у меня выдается мусор (неопределенное поведение) ;)
Теперь расскажу - почему у тебя они выходят в обратном порядке (не специфицированное поведение). Я тут поэкспериментировал, написал такой код:
он выдал:
Как видишь компилятор вычисляет параметры функции operator<< так как ему нравится. То что именно справа налево видимо связано с конвенцией __cdecl. Это сообщение отредактировал(а) LPBOY - 1.10.2005, 23:44 --------------------
Каждый человек по-своему прав, а по-моему нет... |
||||
|
|||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Угу,понятно,разьяснил.
-------------------- Жизнь - печальная штука. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |