|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
|
const float &15.11.2013, 15:08. Показов 13224. Ответов 92
Метки нет (Все метки)
Заметил что часто передают и возвращают const float & ( например в мат либах ), вместо простой передачи значения.
Возникает вопрос: В чём плюс использования const float & вместо обычного float?
0
|
|
| 15.11.2013, 15:08 | |
|
Ответы с готовыми решениями:
92
Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration? Что это bool operator== (const CLASS&) const; ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? |
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
|
| 15.11.2013, 19:33 [ТС] | |
|
0
|
|
|
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
|
|||
| 15.11.2013, 19:36 | |||
|
programina, да в любом случае нули получаются. или около того
1
|
|||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
||
| 15.11.2013, 19:37 | ||
|
0
|
||
|
|
|||
| 15.11.2013, 19:57 | |||
|
C++ #include <iostream> #include <ctime> using namespace std; float *X = new float[1000000000]; float OBbEM_1(int i, float &d) { return d/i; } float OBbEM_2(int i, float d) { return d/i; } int main() { clock_t t; float f = 0.0; t = clock(); for(int i = 0; i < 1000000000; i+=1) { f = i/100000.0; X[i] = OBbEM_1(i, f); } t = clock() - t; cout << t/1000000.0 << endl; t = clock(); for(int i = 0; i < 1000000000; i+=1) { f = i/100000.0; X[i] = OBbEM_2(i, f); } t = clock() - t; cout << t/1000000.0 << endl; delete [] X; } Добавлено через 5 минут А теперь без оптимизации совсем - в итоге по ссылке быстрее! Все это говорит о том, что оптимизация компилятора делает передачу по ссылке заочно. ![]() Добавлено через 3 минуты Вот, попробуйте без оптимизации и с оптимизацией: C++ #include <iostream> #include <ctime> using namespace std; float *X = new float[100000000]; float OBbEM_1(int i, float &d) { return d/i; } float OBbEM_2(int i, float d) { return d/i; } int main() { clock_t t; float f = 0.0; for(int g = 0; g < 10; g++) { t = clock(); for(int i = 0; i < 100000000; i+=1) { f = i/100000.0; X[i] = OBbEM_1(i, f); } t = clock() - t; cout << "По ссылке: " << t/1000000.0 << endl; t = clock(); for(int i = 0; i < 100000000; i+=1) { f = i/100000.0; X[i] = OBbEM_2(i, f); } t = clock() - t; cout << "По значению: " << t/1000000.0 << endl; } delete [] X; }
0
|
|||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|||||||
| 15.11.2013, 20:14 | |||||||
|
Кликните здесь для просмотра всего текста
иначе bad_alloc и деление на 0. -O3
0.001174
0.000985 0.000961 0.00093 0.000928 0.000949 0.000931 0.000929 0.000936 0.000933 0.000926 0.000946 0.000953 0.000941 0.00095 0.00095 0.000945 0.000959 0.000947 0.000952 -Og, хоть смысла это и не имеет)
0.005248
0.002912 0.003422 0.002881 0.00342 0.002926 0.003427 0.002895 0.003416 0.002919 0.003387 0.002904 0.003419 0.002883 0.003346 0.0029 0.003414 0.002901 0.003423 0.002843
0
|
|||||||
|
|
|
| 15.11.2013, 20:24 | |
|
gray_fox, -O3 , кстати почему у вас числа такие маленькие, процессор мощный?
Bash 0.86 0.47 0.47 0.46 0.47 0.46 0.47 0.47 0.47 0.47 0.47 0.47 0.47 0.46 0.46 0.46 0.47 0.47 0.47 0.47
0
|
|
| 15.11.2013, 20:26 | |
|
0
|
|
|
|
||
| 15.11.2013, 20:29 | ||
|
Тоже самое, без оптимизации
Bash 3.05 3.34 2.66 3.31 2.64 3.33 2.64 3.35 2.75 3.38 2.7 3.34 2.68 3.37 2.68 3.39 2.66 3.38 2.68 3.42 Идея. Сейчас проверю на intel core i7 26**
0
|
||
|
|
||
| 15.11.2013, 20:29 | ||
|
const float& нужен, чтобы сказать, что метод не изменяет содержимое аргумента по ссылке, то есть можно передавать в качестве аргументов метода всякие константы. для передачи просто float (без ссылки), const практически не требуется, т.к. функция по-любому не изменит значения оригинальных переменных, которые были переданы в метод при вызове.
0
|
||
|
What a waste!
1610 / 1302 / 180
Регистрация: 21.04.2012
Сообщений: 2,733
|
|||
| 15.11.2013, 20:33 | |||
|
Добавлено через 2 минуты
0
|
|||
|
|
|||||
| 15.11.2013, 20:45 | |||||
|
Вместо того, чтобы мерять время на тесте из трёх строк, проще скомпилить с оптимизациями до ассемблерного файла и посмотреть разницу. Для данной задачи мы имеем ровно тот случай, когда размер (количество операций) имеет значение ![]() Твой кривой замер не говорит вообще ни о чём. И является стандартным примером, когда человек из неправильного замера делает далеко идущие выводы
0
|
|||||
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
||
| 15.11.2013, 20:51 [ТС] | ||
|
programina
Я Вам скинул asm код, к чему вы дальше страдаете бредом? Все ваши:
0
|
||
|
|
|
| 15.11.2013, 20:51 | |
|
Не читая 5 страниц демагогий выскажу своё мнение. Вещественные типы данных возвращаются в стеке FP (насколько я знаю не зависимо от разных соглашений вызовов), поэтому ответ прост:
const - нельзя менять (проверяется в compile-time) & (ссылка) - не создаёт копию переменной, при том, что для стека FP, создавать копию, для современного компилятора, глупо ..
0
|
|
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
|
| 15.11.2013, 20:55 [ТС] | |
|
castaway
Не, ну я видел где используют и const int&.
0
|
|
|
|
|
| 15.11.2013, 20:59 | |
|
В том случае
C++ const float &r
0
|
|
| 15.11.2013, 21:05 | |
|
Не по теме: kvadro, ты видел где используют, но ты в этом смысла не видел..
0
|
|
|
12 / 10 / 1
Регистрация: 12.03.2012
Сообщений: 127
|
||
| 15.11.2013, 21:19 [ТС] | ||
Как единый стандарт - так там в одних функциях используется, в других - нет.Производительность? Судя по asm коду даже без оптимизаций значение лежит в регистре и из него берётся, разве что компилятор генерирует +1 mov, собственно по результату и видно что на 1000000000 итераций мы получаем хлебные крошки.
0
|
||
|
|
||
| 15.11.2013, 21:26 | ||
|
C++ #include <iostream> #include <ctime> using namespace std; float getRef(float &d) { return d; } // по ссылке float getVal(float d) { return d; } // по значению int main() { clock_t t; float f = 0.0; float X; float ref = 0.0, val = 0.0; // сумма long N = 1000000000; double sc = 1000000.0; cout << "ref\tval\n----------------" << endl; for(int g = 0; g < 10; g++) { t = clock(); // старт for(int i = 0; i < N; i++) X = getRef(f); t = clock() - t; // финиш ref += t; cout << t/sc << "\t"; t = clock(); // старт for(int i = 0; i < N; i++) X = getVal(f); t = clock() - t; // финиш val += t; cout << t/sc << "\n"; } cout << "----------------" << endl; cout << "ref: " << ref/sc << endl; cout << "val: " << val/sc << endl; }
0
|
||
|
|
|
| 15.11.2013, 21:28 | |
|
Не по теме: kvadro, mov и float - не совместимы. Добавлено через 1 минуту
0
|
|
| 15.11.2013, 21:28 | |
|
Помогаю со студенческими работами здесь
60
const& и const* в имени функции Ошибка: redeclaration of `const float PI' #define PI or static const float PI Что значит const float PI = 3.14159F ? Error C2664: 'sprintf' : cannot convert parameter 2 from 'float' to 'const char *' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|