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

В чем разницы - C++

Восстановить пароль Регистрация
 
kentaw
 Аватар для kentaw
418 / 126 / 4
Регистрация: 24.02.2009
Сообщений: 1,120
23.02.2010, 08:49     В чем разницы #1
C++
1
++i и i++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
23.02.2010, 09:10     В чем разницы #2
kentaw, ++i - сначала прибавляет, а потом использует, i++ - наоборот
Пример
i = 0; x = a[i++] - Нулевой элемент массива
i = 0; x = a[++i] - 1-й элемент
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
23.02.2010, 09:36     В чем разницы #3
И еще, я где-то слышал, что ++i работает быстрее, чем i++ (по крайней мере, это верно для перегруженных операторов пользовательских типов). Это связано с тем, что для i++ создается временный объект-копия i, значение i увеличивается на единицу и возвращается значение объекта-копии.
Для сравнения, пусть у нас имеется класс целых чисел Integer. Вот реализация перегрузки операторов инкремента, выполненных как функции-члены класса Integer:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Integer
{
private:
    int i;
public:
//..здесь должны быть конструкторы, деструкторы и пр. функции
 
    //Префиксный вариант (++i)
    const Integer& operator++()
    {
        ++i;
        return *this;
    }
 
    //Постфиксный вариант (i++)
    const Integer operator++(int)
    {
        Integer temp(i);//Если существует конструктор, принимающий int
        ++i;
        return temp;
    }
};
В постфиксном варианте возвращаемое значение передается не по ссылке, т.к. возвращается временный объект
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
23.02.2010, 18:17     В чем разницы #4
C++
1
2
++i - префиксный оператор
i++ - постфиксный оператор
Yandex
Объявления
23.02.2010, 18:17     В чем разницы
Ответ Создать тему
Опции темы

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