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

Какая операция быстрее, постинкремент, или преинкремент? - C++

Восстановить пароль Регистрация
 
hugo007
0 / 0 / 0
Регистрация: 09.05.2009
Сообщений: 72
02.11.2011, 20:19     Какая операция быстрее, постинкремент, или преинкремент? #1
какая операция быстрее: постинкремент, или преинкремент?
и почему?
как их можно записать на ассемблере?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 20:19     Какая операция быстрее, постинкремент, или преинкремент?
Посмотрите здесь:

Что быстрее массив или файл C++
C++ Операция ИЛИ
Инкремент и преинкремент C++
C++ Прединкремент и постинкремент в цикле for
Что быстрее, операция присваивания или сравнения? C++
C++ Си++ (прединкремент и постинкремент)?
Что быстрее assembler или c++ C++
C++ Что быстрее: i++ или ++i ?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
02.11.2011, 20:31     Какая операция быстрее, постинкремент, или преинкремент? #2
Цитата Сообщение от hugo007 Посмотреть сообщение
какая операция быстрее: постинкремент, или преинкремент?
и почему?
как их можно записать на ассемблере?
Для встроенных типов обычно различия не существенны, так как в любом случае увеличение значения происходит с помощью одной и той же машинной команды в соответствующем регистре. Разница лишь в дом, что при постинкриментной операции затем значение из регистра должно переслаться по двум адресам: в приемник этого значения и в исходный объект.

Ежели приемник увеличенного значения не используется, как, например, в цикле вида

C++
1
for ( int i = 0 ; i < n ; i++ )
то разницы вообще никакой нет.

Для классов естественно такое различие более заметно, так как создается временный объект и в него копируется исходный, а затем временный объект возвращается из функции-оператора по значению. И хотя компиляторы могут оптимизировать такие операции копирования временных объектов, тем не менее все равно создание временного объекта занимает время.

Семантически различие наглядно демонстрируются в следующем обобщенном примере

C++
1
2
3
4
5
6
7
8
T & operator ++();
 
const T operator ++( int )
{
   T temp( *this );
   ++*this;
   return ( temp );
}
То есть видно, что во втором случае помимо самого оператора инкримента ++*this; еще создается временный объект и этот временный объект возвращается в качестве результата. То есть по крайней мере будет один раз вызван конструктор копирования для выражения T temp( *this ); и для возврата значения из оператора.

Что касается ассемблера, то набор команд зависит от платформы.
Yandex
Объявления
02.11.2011, 20:31     Какая операция быстрее, постинкремент, или преинкремент?
Ответ Создать тему
Опции темы

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