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

Инкремент и вывод на консоль. Непонятное. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ файл.txt http://www.cyberforum.ru/cpp-beginners/thread341006.html
как сделать так чтобы при записи в файл *.txt текст писался на новой строке? Вот на пример вот так: 1)number name 2)number name А не так как у меня 1)number name 2)number name
C++ нубовопросы У меня вопрос, связанный с циклами. Допустим, нужно суммировать числа от 1 до 10 и в итоге получится 55. Для это сделаем { int sum = 0, val = 1; while ( val <= 10 ) sum += val; ++val; } Теперь вопрос: http://www.cyberforum.ru/cpp-beginners/thread341003.html
Вопрос про cin.getline() C++
char mas; cout<<"Add Age "; cin>>Age; cout<<"Add Name "; cin.getline(mas,20); Name = new char; strcpy(Name, mas); cout<<"Add University ";
C++ Разделить массив Char на слова
Привет.. Вот есть массив символов: char buf; Немного далее в коде он печатается: printf(buf); Получается в таком виде: word1 word2 word3
C++ функция вывода http://www.cyberforum.ru/cpp-beginners/thread340970.html
Всем привет! Есть код (правда я еще работаю над ним) #include<iostream.h> #include<conio.h> #include<string.h> class Team { private: char *Surname;
C++ Проблема с компиляцией Сегодня начал изучать C++ Скачал инсталлятор MinGW отсюда: http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/mingw-get-inst-20110802/ установил D:\p1.cpp мой исходник чтобы скомпилировать в командной строке прописал следующее: C:\MinGW\bin\g++ D:\p1.cpp В результате вылетает системная ошибка: Запуск программы невозможен, так как на компьютере... подробнее

Показать сообщение отдельно
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
11.08.2011, 03:02  [ТС]     Инкремент и вывод на консоль. Непонятное.
Цитата Сообщение от Сыроежка Посмотреть сообщение
На самом деле имеет место неопределенное поведение. На одних компиляторах может выдать, как у вас, (6, 6), а на других как (5, 6 )/ Дело в том, что оператору << соответствует вызов оператор-функции operator <<( std::cout, value ); а порядок вычисления аргументов функции не определен. То есть чтобы ыбло более понятно, то ваше выражение можно переписать, как

C++
1
operato<<r( operator<<( operator<<( operator <<( std::cout, i ), " " ), ++i ), "\n" );
В самом внешнем вызове компилятор может сначала "вычислить" выражение "\n", а затем левое выражение, которое в свою очередь представляет вызов оператора-функции. А может поступить наобороь, то есть сначала вычислить левое выражение, то есть вызвать оператор-функцию, а затем "вычислить" правое выражение "\n".

То есть порядок вычисление параметров функции стандартом не установлен, а потому поведение вашего выражения неопределено. Это равносильно вызову f( i, ++i ), то есть сначала может быть вычислено значение левого выражения, а затем правого выражения. А может быть и наоборот, то есть сначала будет вычислено правое выражение, а затем левое. Просто обычно компиляторы начинают именно с правого выражения, так как так легче заносить параметры в стек вызова в соответствии с соглашениями вызова языка С.
Какое правило можно из этого вывести? Чего следует избегать?
 
Текущее время: 06:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru