Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выполнение ++i 
V
    Опции темы
nmn
Дата 26.12.2009, 06:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



здравствуйте

слышал говорят что ++a будет выполняться чуть быстрее чем a++, почему?
PM Skype   Вверх
cristaloleg
Дата 26.12.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 15.6.2009
Где: Donetsk

Репутация: нет
Всего: нет



уже была такая статья...ищи в важных
PM   Вверх
fry
Дата 26.12.2009, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 4.10.2006

Репутация: нет
Всего: 3



Могу разочаровать, с --а и а-- та же хрень творится.

Это сообщение отредактировал(а) fry - 26.12.2009, 09:30
PM MAIL   Вверх
Peter
Дата 26.12.2009, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 28.7.2003
Где: Ставрополь

Репутация: -1
Всего: 1



Не знаю наверняка, но догадываюсь.
++a увеличивает значение a на единицу и возвращает это новое значение, а a++ возвращает старое значение. Таким образом, в первом случае достаточной одной ячейки памяти и работы над ней, а во втором необходимо две - для a и старого значения.


--------------------
всё, что делаете, делайте от души, как для Господа (Послание апостола Павла колоссянам, 3:23).
PM MAIL WWW   Вверх
djamshud
Дата 26.12.2009, 13:41 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 8
Всего: 39



Peter абсолютно прав. Добавлю лишь, что компиляторы уже давным давно научились превращать i++ в ++i, когда это возможно. Так что как правило об этом можно не париться.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
nmn
Дата 26.12.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



спасибо
PM Skype   Вверх
xvr
Дата 26.12.2009, 21:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Если a -это какой нибудь класс, то эффективность выполнения ++a и a++ целиком определяется им самим. В этом случае (с точки зрения здравого смысла и семантики префиксных и постфиксных операций инкремента) ++a должно быть эффективнее

PM MAIL   Вверх
nmn
Дата 27.12.2009, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 593
Регистрация: 26.11.2005

Репутация: нет
Всего: 1



Цитата(xvr @  26.12.2009,  21:52 Найти цитируемый пост)
В этом случае (с точки зрения здравого смысла и семантики префиксных и постфиксных операций инкремента) ++a должно быть эффективнее

можно про это поподробнее
PM Skype   Вверх
xvr
Дата 27.12.2009, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата

можно про это поподробнее 

Peter уже писал подробнее, но могу повторить:
Префиксный инкремент должен увеличить сущность, к которой он применен, и вернуть ее (это семантика ++a в C++). Т.е. при реализации оператором в классе он обычно продвигает то, на что класс указывает, после чего возвращает референс на сам класс с помощью конструкции *this.
Постфиксный инкремент так же увеличивает сущность, но возвращает ЕЕ КОПИЮ ДО увеличения. Что обычно реализуется как
Код

Obj Obj::operator++ (int)
{
 Obj rv=*this;
 this->operator ++();
 return rv;
}
Т.е. по сравнению с префиксным инкрементом имеем:
  •  Создание нового объекта с помощью copy-contructor
  •  Возврат объекта по значению (что так же добавляет конструктор и деструктор)


PM MAIL   Вверх
bsa
Дата 29.12.2009, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.