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

const float &

15.11.2013, 15:08. Показов 14437. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru