Type vs const & Type
От: Аноним  
Дата: 17.09.02 08:38
Оценка:
Hi, All!

Скажите, а есть разница в скорости между

void function(Type i) { /* ... */ }


и

void function(const Type & i) { /* ... */ }


для простых типов (int, char, double и т.п.)?

(Для классов и структур второй вариант точно быстрее.)

Thanx.
Re: Type vs const & Type
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 17.09.02 08:42
Оценка:
Здравствуйте Аноним, Вы писали:

А>Hi, All!


А>Скажите, а есть разница в скорости между



А>для простых типов (int, char, double и т.п.)?


А>(Для классов и структур второй вариант точно быстрее.)


разница в скорости незначительна.
во втором случае значение i компилятор тебе поменять не даст
(и это хорошо, меньше путаницы)
- А Вы что курите?
— Минздрав предупреждает
Re: Type vs const & Type
От: Vasiliy_Krasnokutsky Россия  
Дата: 17.09.02 08:51
Оценка:
Здравствуйте Аноним,
Позвольте с вами не согласиться, разница в скорости может быть значительно.
В первом случае мы копируем объект при вызове функции(метода), а во втором только передаем адрес(ссылку). Если объект является большой структурой, то разница в скорости между двумя этими способами м.б. очень значительна...

С Уважением Краснокутский Василий
Re[2]: Type vs const & Type
От: Ростислав Глухов Россия http://www.geocities.com/rg2204/
Дата: 17.09.02 08:53
Оценка:
Здравствуйте Vasiliy_Krasnokutsky, Вы писали:

VK>Позвольте с вами не согласиться, разница в скорости может быть значительно.

VK>В первом случае мы копируем объект при вызове функции(метода), а во втором только передаем адрес(ссылку). Если объект является большой структурой, то разница в скорости между двумя этими способами м.б. очень значительна...

ну он же в конце именно это и написал...
- А Вы что курите?
— Минздрав предупреждает
Re[2]: Type vs const & Type
От: Lexey Россия  
Дата: 17.09.02 08:55
Оценка:
Здравствуйте Vasiliy_Krasnokutsky, Вы писали:

VK>Позвольте с вами не согласиться, разница в скорости может быть значительно.

VK>В первом случае мы копируем объект при вызове функции(метода), а во втором только передаем адрес(ссылку). Если объект является большой структурой, то разница в скорости между двумя этими способами м.б. очень значительна...

Ты вопрос внимательно прочитал? Спрашивалось про простые типы. Для них передача по значению не медленнее (а может быть и быстрее — все зависит от того, как компилятор разместит переменную), чем передача по ссылке.
Re: Type vs const & Type
От: grs Россия  
Дата: 17.09.02 08:58
Оценка:
Здравствуйте Аноним, Вы писали:

А>Hi, All!


А>Скажите, а есть разница в скорости между


А>
А>void function(Type i) { /* ... */ }
А>


А>и


А>
А>void function(const Type & i) { /* ... */ }
А>


А>для простых типов (int, char, double и т.п.)?


А>(Для классов и структур второй вариант точно быстрее.)


А>Thanx.


Тут уже был целый флейм по этому поводу. См. http://www.rsdn.ru/forum/Message.aspx?mid=35976. А вкратце пришли к тому, что типы, размеры которых соизмеримы с размерами указателей на них, обычно быстрее передавать по значению. Т.е. первый вариант для простых типов предпочтительней.
Re[3]: Type vs const & Type
От: Vasiliy_Krasnokutsky Россия  
Дата: 17.09.02 09:01
Оценка:
Господа прошу прощения, я не прочитал последнюю строчку

Забираю свои слова обратно

С Уважением Краснокутский Василий
Re: Type vs const & Type
От: Aperon Украина  
Дата: 17.09.02 09:36
Оценка:
Здравствуйте Аноним, Вы писали:

А>Hi, All!


А>Скажите, а есть разница в скорости между


А>
А>void function(Type i) { /* ... */ }
А>


А>и


А>
А>void function(const Type & i) { /* ... */ }
А>


А>для простых типов (int, char, double и т.п.)?


А>(Для классов и структур второй вариант точно быстрее.)


А>Thanx.

Многое зависит от оптимизации. Вообщем, можно сказать, что, если,
ссылка реализована по-честному, т.е. как константный указатель,
то первый вариант быстрее. А если параметр функции есть переменная
интегрального типа, то первый вариант быстрее всегда.
Кстати, не факт, что для классов и структур второй вариант быстрее.
Все зависит от "внутренностей" этих классов и структур. Для ссылок
на константу по определению разрешены приведения типа по-умолчанию.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.