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

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

Войти
Регистрация
Восстановить пароль
 
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
#1

Особенности инкремента - C++

14.12.2012, 19:21. Просмотров 388. Ответов 9
Метки нет (Все метки)

Здравствуйте!Возник вопрос касательно операции инкремента(++)

допутим у нас есть код
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    int a=5;
    std::cout<<a++;
    return 0;
}
согласно правилам он сначала выводит на экран, а потом увеличивает на единицу.Всё так и работает.

Тогда по чему в коде
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    int a=5;
    std::cout<<a++<<' '<<++a;
    return 0;
}
выводится не 5 и 7, как по логике должно быть, а выводится 6 и 7.
Обьясните пожалуйста, никак понять не могу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2012, 19:21     Особенности инкремента
Посмотрите здесь:

Секреты инкремента - C++
Пожалуйста!!! помогите! Умоляю!:help: i=5; j=(++i) + (++i): Чему равно j?; пожалуйста обьясните как это решается, ну или...

Перегрузка инкремента ++ - C++
Не понимаю как вызвать перегрузку инкремента: void operator ++( int m ); в функции main,какой синтаксис. Я в main циклично ввожу числа и...

Перегрузка инкремента - C++
Допустим, что некий класс имеет в наличии методы пре(и пост-)фиксного инкрементов. Date&amp; Date::operator++(); Date...

Перегрузка префиксного инкремента - C++
Как перегрузить префиксальный инкремент? class Horse{ private: int x,y; public: Horse(void); void setX(int); ...

Перегрузка операции инкремента - C++
Как известно, постинкремент возвращает r-value, а преинкремент - l-value. То есть: ++(++x); // допустимо (x++)++; // ошибка...

Перегрузка операторов инкремента - C++
Мне надо перегрузить инкримент, я пытался сделать постфиксный и + . Я вродебы сделал, но оно почему-то не выводит.( prog.h #pragma once...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
14.12.2012, 19:23     Особенности инкремента #2
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
int main()
{
    int a=5;
 
    std::cout<<a++<<' ';
    std::cout<<++a;
 
    return 0;
}
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
14.12.2012, 19:27     Особенности инкремента #3
Undefined behavior. Подробнее вырезано
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
14.12.2012, 19:27     Особенности инкремента #4
Ищите инфу по точкам следования: http://alenacpp.blogspot.com/2005/11...ce-points.html
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
14.12.2012, 19:27  [ТС]     Особенности инкремента #5
Avazart, обьясните пожлауйста, чем так кардинально отличается мой и ваш пример, что он на результат влияет(в вашем случае выводится всё по логике вещей).
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
14.12.2012, 19:28     Особенности инкремента #6
Собственно как я помню порядок выполнения ++a и a++ не определен в строке
C++
1
std::cout<<a++<<' '<<++a;
Собственно у меня вообще 6 6 выдает, это и есть undefined behavior

Есть такое и Дьюхерсте
Oleshko
21 / 21 / 1
Регистрация: 11.12.2012
Сообщений: 64
14.12.2012, 19:32     Особенности инкремента #7
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
std::cout<<a++<<' '<<++a;
по моему, в стандарте не прописано об результате такого действия...
и как оно делается - известно только разработчикам компилятора
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
14.12.2012, 19:34     Особенности инкремента #8
Тоже касается ф-ций ( из ссылки)
Пример с функциями:
C++
1
2
3
4
void f(int, int);
int g();
int h();
f(g(), h());
По Стандарту неизвестно, какая из функций g или h будет вызвана первой, но известно, что f() будет вызвана последней.
Так что дело не в инкрементах как бы
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
14.12.2012, 19:48     Особенности инкремента #9
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
выводится не 5 и 7, как по логике должно быть, а выводится 6 и 7.
В принципе должно 6 6(потому что с право налево идем). Хотя не помню как оно в стандарте сказано.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2012, 20:19     Особенности инкремента
Еще ссылки по теме:

Использование инкремента(Декремента) - C++
Есть три кнопки и три индикатора(лампочки). Если нажимаю кнопку-1 тогда включается лампочка нажимаю еще раз выключается. Если по одному...

Операция инкремента и декримента на С++ - C++
Смотрите, написал я прогаммку в Ц++, вот отрывок от неё: ...int main () { int a,b,c,k; a=100;b=2;c=4; cout &lt;&lt; &quot;Operand 2=2&quot;; for...

Оператор перегрузки инкремента - C++
Добрый день. Мне нужна оценка кода. Правильно - ли я все сделал? Подскажите пожалуйста. если что не так. /*Создать класс с перегрузкой...

Взялся за Cи, конкретно за Си, без инкремента. - C++
Взялся за Cи, конкретно за Си, без инкремента. До этого пол года изучал Delphi, в консольном режиме.Как мне кажется способности к изучению...


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

Или воспользуйтесь поиском по форуму:
Avazart
Эксперт С++
7122 / 5299 / 273
Регистрация: 10.12.2010
Сообщений: 23,449
Записей в блоге: 17
14.12.2012, 20:19     Особенности инкремента #10
Идем справа налево в плане возвращаемых значений, но не в плане их расчета.

Добавлено через 17 минут
Собственно то же что и

C++
1
2
3
4
5
6
7
8
9
int f(){std::cout<<"f()\n"; return 1;}
int h(){std::cout<<"h()\n"; return 2;}
 
int main()
{
int z= f()+ h(); // ответ 3, но порядок непредсказуем
 
result 0;
}
Yandex
Объявления
14.12.2012, 20:19     Особенности инкремента
Ответ Создать тему
Опции темы

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