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

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

Войти
Регистрация
Восстановить пароль
 
hugo007
0 / 0 / 0
Регистрация: 09.05.2009
Сообщений: 72
#1

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

02.11.2011, 20:19. Просмотров 1058. Ответов 1
Метки нет (Все метки)

какая операция быстрее: постинкремент, или преинкремент?
и почему?
как их можно записать на ассемблере?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2011, 20:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Какая операция быстрее, постинкремент, или преинкремент? (C++):

Что быстрее, операция присваивания или сравнения? - C++
Всем доброго времени суток, такой вод у меня дурацкий вопрос сидит в голове, "Что быстрее, операция присваивания или сравнения?". Вот...

Инкремент и преинкремент - C++
Здравствуйте. Я вот решил протестить в чем разница между инкрементом и преинкрементом, и как-то не увидел разницы... В чем же разница? :) ...

Си++ (прединкремент и постинкремент)? - C++
1)float c; int a=1, b=2; c=a/b; Ответ:0,5 Подскажите, если будет вот так: float c; int a=1, b=2; c=(float )a/b; то...

Прединкремент и постинкремент в цикле for - C++
Всем привет! Пытаюсь сам себе ответить на вопрос, есть ли разница в использовании пред- и постинкремента в цикле for. Т.е. циклы: for...

Что быстрее: i++ или ++i ? - C++
Только что прочитала в интернете, что префиксный итератор быстрее, чем постфиксный. Так ли это? Если так и если в С++ все есть обьект, то...

Что быстрее assembler или c++ - C++
Вопрос от новичка. Что будет быстрее по скорости выполнения и на сколько: 1) сложить a+b на C++ или на assembler 2) умножить a*b на C++...

1
Сыроежка
Заблокирован
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 ); и для возврата значения из оператора.

Что касается ассемблера, то набор команд зависит от платформы.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2011, 20:31
Привет! Вот еще темы с ответами:

Операция ИЛИ - C++
Добрый вечер) Я новичок в СИ поэтому если вопрос глупый не пинайте) Возможно ли сделать подобную операцию в СИ: IF (a == 3 ИЛИ 4) {...

Что быстрее списки или вектор ? - C++
Всем привет. Делаю приложение и очень важна скорость обработки данных, а нужно хранить динамические массивы. В каком формате будет...

Что быстрее массив или файл - C++
Привет! Я тут занялся обработкой содержимого текстовых файлов для этого пишу класс отслеживающий положение курсора в файле (типа номер...

If или switch().case. Что быстрее - C++
Есть два кода. Первый: if(a == 2) a += 2; if(a == 3) a+= 3; if(a == 4) a+=4; Второй:


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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