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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа МКБ-10 написана на С++? http://www.cyberforum.ru/cpp-beginners/thread782654.html
Здравствуйте. Скажите, эта программа(МКБ-10) написана на С++? Благодарю.
C++ преобразование bitmap в YCbCr и обратно Доброго времени суток. Нужно преобразовать изображение из формата RGB в YCbCr и обратно. В принципе все работает, но после преобразования цвета искажены. Коэффициенты проверил не один раз - все правильно, кто может подсказать в чем косяк? (изображение прилагаются, изменен размер, преобразовано в jpg) unsigned char* RGBToYCbCr(BITMAPINFOHEADER* bh, unsigned char* lpSurface) { __int16 Y, Cb,... http://www.cyberforum.ru/cpp-beginners/thread782648.html
Треугольник задан своими вершинами (x1,y1),(x2,y2),(x3,y3). Найти высоты треугольника. C++
Буду очень признателен, если поможете безрукому... 1. Треугольник задан своими вершинами (x1,y1),(x2,y2),(x3,y3). Найти высоты треугольника. Правила форума
cout в классе C++
Создал класс. Вот фрагмент кода: #include <iostream> #include "stdafx.h" #include "put_O.h" using namespace std; char* mass;
C++ multimap http://www.cyberforum.ru/cpp-beginners/thread782626.html
Я что-то не понимаю в чем проблема! #include <iostream> #include <string> #include <map> using namespace std; int main() { multimap<string,float> coll;
C++ лаб роб дано n-ка дийсних чисел. впорядкувати их в порядку зростання подробнее

Показать сообщение отдельно
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
09.02.2013, 19:22     Странное рекурсивное поведение объекта std::cout
Цитата Сообщение от Kastaneda Посмотреть сообщение
На самом деле очень интересно, может кто-нибудь стандарт пошелестит?
Enjoy your C++, что ещё сказать. Перегруженные операторы сохраняют приоритеты и ассоциативность соответствующих операторов, но при этом являются функциями со всеми вытекающими. Включая sequence point перед и после тела, но не между вычислениями операндов. Смотрите
C++
1
2
std::cout << 'e' <<  'n';
operator<<(operator<<(std::cout, 'e'), 'n');
и точно так же
C++
1
2
std::cout << a.qget() << a.qget() << a.qget();
operator<<(operator<<(operator<<(std::cout, a.qget()), a.qget()), a.qget());
Так вот, стандарт не обязывает вычислять аргументы в каком-то определённом порядке. Только чтоб они были вычислены до того, как пойдёт работа тела функции. Поэтому компилятор может как сначала вычислить внутренний operator<<(), а только потом вытянуть из очереди следующий элемент, так и наоборот — сначала вытянуть, запомнить его, и только потом приняться за operator<<(). Итого побочные эффекты типа "вывод в поток" оказываются упорядоченными правильно, а побочные эффекты "изменение состояния очереди" — в противоположном порядке. Так как вычисление значений обычных символов не имеет побочных эффектов, то с ними всё хорошо.

Справедливости ради, если б они оставались не функциями, а какими-то магическими "описателями операторов", то всё равно среди операторов sequence point есть только у запятой и тернарного.
 
Текущее время: 16:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru