Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/64: Рейтинг темы: голосов - 64, средняя оценка - 4.52
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127

const float &

15.11.2013, 15:08. Показов 14515. Ответов 92
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Заметил что часто передают и возвращают const float & ( например в мат либах ), вместо простой передачи значения.

Возникает вопрос: В чём плюс использования const float & вместо обычного float?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.11.2013, 15:08
Ответы с готовыми решениями:

Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
Пытаюсь скомпилировать программу пишет friend ostrem&amp; operator &lt;&lt;(ostream&amp; outs, const Rational&amp;); - invalid function declaration. ...

Что это bool operator== (const CLASS&) const;
Что это? class CLASS { public: bool operator== (const CLASS&amp;) const; ...

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt; setw(5) &lt;&lt; ptr; // вывод элементов...

92
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
15.11.2013, 17:29  [ТС]
Студворк — интернет-сервис помощи студентам
И что? Так мы создаём копию объекта( на стеке ), а так мы кладём ссылку в стек. Это эквивалетные операции.
И по времени они аналогичны.
Перефразирую. Локальная переменная создаётся в любом случае, только в первом варианте она уже содержит значение, а во втором ссылку на это значение.
0
15.11.2013, 17:31

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
включаем оптимизацию и 0 0 показывают оба компилятора
Ну можете добавить volatile :)

0
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
15.11.2013, 17:32  [ТС]
вы лучше вместо своих подсчетов, запустите мой пример и посмотрите числа.
Без оптимизаций:
4.53236
4.50448
С оптимизациями:
2e-06
1e-06
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
15.11.2013, 17:36
programina, С volatile и noinline передача по ссылке чертовски проигрывает.

Еще можно почитать это: http://stackoverflow.com/quest... -reference
0
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
15.11.2013, 17:37
Цитата Сообщение от Evg Посмотреть сообщение
Да, про пример я примерно так и подумал. В качестве результирующего кода в случае inline-подстановки разницы быть не должно. Без inline-подстановки при наличии const float & код ухудшится. Мне тоже было бы интересно узнать, зачем так делается.
Логично предположить, что это делается как раз в расчёте на инлайн, в виде своеобразной подстраховки, чтобы компилятору уж точно не пришло в голову создавать копии. Кроме того, подобные случаи могут быть проявлением cargo cult programming, слепого следования рекомендациям без малейшего понимания причин, лежащих в основе этих рекомендаций.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
15.11.2013, 17:40
И по-моему отличный ответ на вопрос: как стоит передавать переменные в С++.
http://stackoverflow.com/quest... tions-in-c
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
15.11.2013, 17:56
Цитата Сообщение от ForEveR Посмотреть сообщение
С volatile и noinline передача по ссылке чертовски проигрывает.
Естественно, что по значению будет быстрее с оптимизацией, все равно ведь внешние обьекты не меняются.

Добавлено через 31 секунду
Это компилятор за вас решает, где и как оптимизировать
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
15.11.2013, 17:57
Цитата Сообщение от Nick Alte Посмотреть сообщение
это делается как раз в расчёте на инлайн
о чем как раз говорит использование __forceinline во втором примере, а не стандартного inline.
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
15.11.2013, 17:59
Мне кажется это просто для единообразия; и я сильно сомневаюсь, что будет какая-либо разница в эффективности после оптимизации.
1
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
15.11.2013, 18:11
Кто знает, может, в борландовских компиляторах разница-то будет...
0
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
15.11.2013, 18:18  [ТС]
То что в варианте с ссылками будет в 2 раза больше команд это понятно, но вот что результат при этом будет близок ( а как видно из постов у некоторых людей ещё и быстрей ), говорит что скорей разница будет зависеть от самого процессора.
0
15.11.2013, 18:23

Не по теме:

kvadro, да в любом случае по ссылке будет быстрее, просто вы считаете себя умнее компилятора. Вот и все.

0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
15.11.2013, 18:24
programina, Почитайте же кучу тем, которые я скидывал, если английский позволяет.
0
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
15.11.2013, 18:26  [ТС]
да в любом случае по ссылке будет быстрее, просто вы считаете себя умнее компилятора. Вот и все.
Вы так и не смогли аргументировать свои слова, так что я не вижу смысла принимать их всерьез.

А насчёт "умнее компилятора", давайте спросим у самого компилятора что он думает по этому поводу:
Assembler
1
2
3
4
5
6
7
8
9
movq    -8(%rbp), %rax
movss    (%rax), %xmm0
addss    %xmm0, %xmm0
movq    -16(%rbp), %rax
movss    (%rax), %xmm1
mulss    %xmm1, %xmm0
movq    -16(%rbp), %rax
movss    (%rax), %xmm1
mulss    %xmm1, %xmm0
Assembler
1
2
3
4
movss    -4(%rbp), %xmm0
addss    %xmm0, %xmm0
mulss    -8(%rbp), %xmm0
mulss    -8(%rbp), %xmm0
Ну и понятно в данном случае size_t > float( я об этом говорил в первом пункте ):

Assembler
1
2
movq        %rdi, -8(%rbp)
movq        %rsi, -16(%rbp)
Assembler
1
2
movss    %xmm0, -4(%rbp)
movss    %xmm1, -8(%rbp)
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
15.11.2013, 18:28
Цитата Сообщение от programina Посмотреть сообщение
kvadro, да в любом случае по ссылке будет быстрее, просто вы считаете себя умнее компилятора. Вот и все.
) это как раз вы считаете себя умнее компилятора, утверждая, что
Цитата Сообщение от programina Посмотреть сообщение
в любом случае по ссылке будет быстрее
0
15.11.2013, 18:32
Лучший ответ Сообщение было отмечено как решение

Решение

Не по теме:

в любом случае по ссылке будет быстрее
И.В.Сталин

4
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
15.11.2013, 18:45
kvadro, gray_fox, Tulosba, почему то я своему компилятору верю больше чем утверждению о том, что по значению быстрее.

Кстати кусок асемблера от kvadro, о чем он хотел сказать?
0
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
15.11.2013, 18:51  [ТС]
programina
Попрошу удалится с темы, от Вас один флуд на тему "с ссылками быстрее", мнение не аргументировано, фактов нет.
0
What a waste!
 Аватар для gray_fox
1612 / 1304 / 180
Регистрация: 21.04.2012
Сообщений: 2,735
15.11.2013, 18:55
Цитата Сообщение от programina Посмотреть сообщение
почему то я своему компилятору верю больше чем утверждению о том, что по значению быстрее.
Я и не говорил, что по значению быстрее. Но то, что у вас по ссылке быстрее - так это ничего не доказывает, при других условиях может быть совсем по другому, с чего вы решили, что это универсальное правило? Я лично не вижу ни одной причины.
+ судя по коду, компилятор может легко выкинуть циклы, т.к. результат вычислений не используется.
0
 Аватар для programina
2062 / 619 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
15.11.2013, 19:27
Цитата Сообщение от kvadro Посмотреть сообщение
programina
Попрошу удалится с темы, от Вас один флуд на тему "с ссылками быстрее", мнение не аргументировано, фактов нет.
kvadro,

Цитата Сообщение от gray_fox Посмотреть сообщение
судя по коду, компилятор может легко выкинуть циклы, т.к. результат вычислений не используется
Какой тогда смысл вообще что-то высчитывать? Я говорю о том случае когда наоборот каждый раз должно быть подсчитано значение.

Добавлено через 28 минут
И еще, у кого по значению получилось быстрее, просто переставьте вызов по ссылки вниз, а по значению вверх. Дело в том, что у вас процессор холодный и ему нужно время чтобы разогнаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.11.2013, 19:27

const& и const* в имени функции
Объясните пожалуйста что значит const&amp; и const* в имени и параметрах функции(пример из Вандевурд,Джосаттис): template &lt;typename...

Ошибка: redeclaration of `const float PI'
#include &lt;iostream&gt; using namespace std; int main () { int radiys; int total_okryznosti; int total_ploshadi; const...

#define PI or static const float PI
Что лучьше обьясните? #define PI 3,14159265 или static const float PI=3,14159265;

Что значит const float PI = 3.14159F ?
Для изучения С++ использую книгу Лафоре. На стр. 61 видим предложение: &quot;Если вам необходимо описать константу long, то после ее числового...

Error C2664: 'sprintf' : cannot convert parameter 2 from 'float' to 'const char *'
Читаю в Интернете пишут о том что нужно явное преобразование типов, подскажите, пжл, как его произвести. PS: если оно тут...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru