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

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

Войти
Регистрация
Восстановить пароль
 
Doctor_
 Аватар для Doctor_
233 / 233 / 69
Регистрация: 03.02.2011
Сообщений: 1,407
#1

Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах - C++

27.10.2011, 11:28. Просмотров 46002. Ответов 8
Метки нет (Все метки)

Можете объяснить разницу между i++ и ++i на просто примере с цифрами?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2011, 11:28     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах
Посмотрите здесь:

Скобки не работают с постфиксным инкрементом C++
Передача параметров в sprintf - объяснить разницу в двух примерах C++
Вычислить разницу между двумя датами C++
C++ Объясните разницу между указателем и ссылкой
Найти разницу между количествами слов C++
Просьба объяснить работу std::thread в двух коротких примерах кода C++
C++ Объяснить разницу в именовании заголовочных файлов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
VenCarbon
32 / 31 / 3
Регистрация: 14.12.2010
Сообщений: 158
27.10.2011, 11:41     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #2
C
1
2
3
4
5
6
int x = 5;
int y;
 
y = ++x; // y = 6, x = 6:  сначала увеличивается x на 1, потом y = x.
y = --x; // y = 5, x = 5: сначала уменьшается x на 1, потом y = x.
y = x++; // y = 5, x = 6: сначала присваивается значение y = x, потом x увеличивается на 1.
все дело в приоритете операций) ++x - выполняется сначала, x++ - потом, после всех остальных операций.
aas_
0 / 0 / 0
Регистрация: 26.10.2011
Сообщений: 7
27.10.2011, 12:07     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #3
Цитата Сообщение от VenCarbon Посмотреть сообщение
C
1
2
3
4
5
6
int x = 5;
int y;
 
y = ++x; // y = 6, x = 6:  сначала увеличивается x на 1, потом y = x.
y = --x; // y = 5, x = 5: сначала уменьшается x на 1, потом y = x.
y = x++; // y = 5, x = 6: сначала присваивается значение y = x, потом x увеличивается на 1.
все дело в приоритете операций) ++x - выполняется сначала, x++ - потом, после всех остальных операций.
Не знаю насчет C++, но про C точно помню, x++ и ++x одинаковый приоритет имеют. Разница только в возвращаемом значении, а не приоритете
VenCarbon
32 / 31 / 3
Регистрация: 14.12.2010
Сообщений: 158
27.10.2011, 12:30     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #4
Цитата Сообщение от aas_ Посмотреть сообщение
Не знаю насчет C++, но про C точно помню, x++ и ++x одинаковый приоритет имеют. Разница только в возвращаемом значении, а не приоритете
В выражениях типа
C
1
2
3
int i = 0;
for (i = 0; i < n; i++) { // здесь можно написать (i = 0; i < n; ++i)
}
действительно, не играет роли.

Но в выражениях типа
C
1
j = (k++) - (--i)
как раз важно, где поставлен инкремент/декремент. значение j будет разным. попробуйте поиграть с такими вещами)
Thinker
Эксперт C++
 Аватар для Thinker
4218 / 2192 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
27.10.2011, 12:40     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #5
Цитата Сообщение от aas_ Посмотреть сообщение
Не знаю насчет C++, но про C точно помню...
В java, С, С++, С# операции инкремента и декремента могут быть в префиксном и постфиксном вариантах. Так вот если выражение простое, то это одно и тоже, а вот если выражение составное, то результат зависит от формы данных операций.
Splitter
 Аватар для Splitter
201 / 143 / 5
Регистрация: 13.01.2009
Сообщений: 554
27.10.2011, 12:46     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #6
Цитата Сообщение от VenCarbon Посмотреть сообщение
В выражениях типа
C
1
2
3
int i = 0;
for (i = 0; i < n; i++) { // здесь можно написать (i = 0; i < n; ++i)
}
действительно, не играет роли.
тут тоже могут быть свои нюансы
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
27.10.2011, 18:12     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #7
Цитата Сообщение от VenCarbon Посмотреть сообщение
++x - выполняется сначала, x++ - потом, после всех остальных операций.
Цитата Сообщение от VenCarbon Посмотреть сообщение
y = x++; // y = 5, x = 6: сначала присваивается значение y = x, потом x увеличивается на 1.
Это не так. Рассмотрим код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
 
class A {
public:
    A &operator= (const A &rhs)
    {
        if (this == &rhs)
            return *this;
        std::cout << "operator=\n";
        return *this;
    }
    A operator++ (int)
    {
        std::cout << "postfix operator++\n";
        return *this;
    }
};
 
int main()
{
    A x, y;
 
    x = y++;
 
    return 0;
}
вывод
postfix operator++
operator=


Разница в том что постфиксная форма возвращает старое значение обьекта, а префиксная уже измененное.
Но приоритет и порядок вычисления операторов тот же самый.
Captain Maxee
 Аватар для Captain Maxee
19 / 19 / 5
Регистрация: 15.12.2015
Сообщений: 63
10.02.2017, 04:25     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #8
Поддерживаю.
Цитата Сообщение от aas_ Посмотреть сообщение
Не знаю насчет C++, но про C точно помню, x++ и ++x одинаковый приоритет имеют. Разница только в возвращаемом значении, а не приоритете
Цитата Сообщение от Net_Wanderer Посмотреть сообщение
Разница в том что постфиксная форма возвращает старое значение обьекта, а префиксная уже измененное.
Но приоритет и порядок вычисления операторов тот же самый.
Еще хотелось бы сказать, что ++operator быстрее, чем operator++;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2017, 05:13     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах
Еще ссылки по теме:

C++ Объяснить разницу между массивом типа char и строкой в стиле Си (нюансы использования нуль-терминатора)
C++ Объяснить работу программы (нахождение простых чисел, решето Эратосфена)
Объяснить разницу между объявлениями массивов C++
Объяснить разницу между int64_t, int_fast64_t и int_least64_t C++
C++ Объяснить разницу в объявлениях указателя

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

Или воспользуйтесь поиском по форуму:
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
3360 / 1682 / 447
Регистрация: 18.10.2014
Сообщений: 3,088
10.02.2017, 05:13     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах #9
Цитата Сообщение от aas_ Посмотреть сообщение
но про C точно помню, x++ и ++x одинаковый приоритет имеют.
И в С, и в С++ постфиксные операторы всегда имеют более высокий приоритет, чем унарные (т.е. префиксные). Т.е. нет, не одинаковый. Но смысла в сравнении приоритетов ++ в С нет, ибо выражения, в котором эти приоритеты будут соперничать, все равно будут некорректными.

Цитата Сообщение от Captain Maxee Посмотреть сообщение
Еще хотелось бы сказать, что ++operator быстрее, чем operator++
"Быстрее" он или "не быстрее" зависит от массы факторов. Если речь идет о фундаментальных типах, то нет никаких причин для какой-то разницы в скорости между этими операторами.
Yandex
Объявления
10.02.2017, 05:13     Объяснить разницу между префиксным и постфиксным инкрементом на простых примерах
Ответ Создать тему
Опции темы

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