![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
ВЫВОД:
Не следует употреблять подобные конструкции. ![]() |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
А вообще - это довольно undefined behavior, посудите сами: что думать компилятору если << это операция обьявленная юзером. Порядок определения операций не определен стандартом, поэтому следует больше избегать таких операций.
--------------------
|
|||
|
||||
HELPER |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 18.4.2005 Репутация: -2 Всего: -2 |
А у меня норма, в debug, release всегда 29 30, а может дело вообще не в компиляторах??? может дело в самой iostream.h? может в компиляторах:
просто идет не родная библиотека, а модифицированная, например размер h файла: VC++ 3-4 kb BC5.02 36 kb TC 28 kb BC 31 kb Добавлено @ 08:45 Я к чему ето все... ![]() Неужели, за веремя существования этой библиотеки в нее не вносили изменений серьезные дяденьки программисты? ![]() |
||||
|
|||||
Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
А при чем тут потоки? Они всего-навсего определяют семантику операторов >> и << - как и в каком порядке вычислять операнды - дело компилятора.
Дык, это часть стандартной библиотеки C++ - стандарт не определяет реализацию, он только выдвигает определенные требования, которым должна соответствовать библиотека - и все. Существует масса реализаций, наиболее популярны те, что получили свое начало в недрах HP и SGI (сколько я знаю, корни у Dinkumware и STLPort все там же). Так вот, я к тому, что стандарт не определяет, как должен вести себя компилятор в такой ситуации - значит это undefined behaviour - значит это зло! ![]() P.S. Кстати, а где народ iostream.h в MSVC 7.1 откопал? К счастью, этот deprecated хидер оттуда выкинут и есть только iostream. С ним и тестировал. -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
HELPER |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 18.4.2005 Репутация: -2 Всего: -2 |
Void, я про саму библиотеку, а не отом, что она делает...., хотя раз она определаят операторы << >> то может быть дело в порядке вычисления - слева на право или наоборот? |
|||
|
||||
Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
А я про что... ![]() -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
HELPER |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 63 Регистрация: 18.4.2005 Репутация: -2 Всего: -2 |
...
![]()
но результат 30 30 вообще не понятен... |
|||
|
||||
Alastis |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 251 Регистрация: 15.11.2004 Где: Казахстан, Астана Репутация: 4 Всего: 10 |
-------------------- Прости, что я говорю, когда ты меня перебиваешь. |
|||
|
||||
Fantasist |
|
||||
![]() Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: 4 Всего: 41 |
Да в общем-то компилятору пофиг, объявленна перегружен ли оператор пользователем или нет. По сути, оператор<< уже перегружен для ostream. Ассоциативность для оператора<< стандартом таки опредленна, поэтому конструкция типа
Вполне валидна и выдает предсказуемый результат. (так же как и a<<b<<2). То, что явлется здесь undefined behavior - это, как обычно, изменение значение переменной. Так как sequence point'ов в этом выражении нет, то его составляющие компоненты могут вычислятся в произвольном поряедке. В принципе, компилятор может вначале вычислить a и b, а потом их вывести. А может вычислить а, вывести а, вычислить b, выветси b, вывести а. -------------------- Волны гасят ветер... |
||||
|
|||||
kometa_triatlon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 384 Регистрация: 7.1.2005 Где: Киев Репутация: 2 Всего: 6 |
Так, не в тему:
может сделать опрос на форуме, у кого какие результаты выдает на каком компиляторе? ![]() -------------------- Всё очень просто: сказки обман, Солнечный остров скрылся в туман, Замков воздушных не носит земля, Кто-то ошибся, ты или я. -------------- Программирование - самое большое удовольствие, которое вы можете получить, будучи одетым. |
|||
|
||||
chipset |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Давай ![]() --------------------
|
||||
|
|||||
Rickert |
|
|||
![]() Ситхи не пройдут! ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3356 Регистрация: 11.7.2006 Где: Лакрима Репутация: 0 Всего: 52 |
Это UB.
Это ведь тоже самое что и:
по сути ![]() Это сообщение отредактировал(а) Rickert - 28.6.2007, 06:40 -------------------- Ни что не внушает сна крепче, чем день приисполненный трудов! |
|||
|
||||
korbian |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 336 Регистрация: 20.2.2007 Где: Penza Репутация: 2 Всего: 14 |
minGW 3.4.2
30 31 -------------------- korbian © |
|||
|
||||
FiMa1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 408 Регистрация: 23.9.2006 Репутация: 5 Всего: 6 |
Borland C++ Builder 6.0
29 30 (и для 'Full debug' и для 'Release') MS Visual Studio 2005 Professinal Editition (#include <iostream> вместо "iostream.h") 29 30 ('Debug') 30 30 ('Release') Это сообщение отредактировал(а) FiMa1 - 28.6.2007, 10:59 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
GСС 4.1.2 во всех режимах оптимизации выдал 29 30.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |