Допустим, будет ли выигрыш по времени выполнения/памяти во втором случае или нет?
void f(int x)
{
cout << x;
}
void f(const int &x)
{
cout << x;
}
Если передать объект по значению, то вызовется конструктор копирования, а после выхода из тела функции -- деструктор. Теоретически, это тоже занимает время. А что происходит, когда передается ссылка? И сколько памяти она занимает? Для какого-нибудь "увесистого" объекта выигрыш по памяти точно будет, это понятно, а вот как лучше поступать с базовыми типами -- вопрос.
Теоретически сам вывод в консоль займет настолько больше времени, чем передача аргумента (которой из-за оптимизатора скорее всего не будет вообще), что уж этим эффектом точно можно пренебречь...
Вот смотрите, на VC++ 2017:
void f(int x)
{
cout << x;
}
void g(const int &x)
{
cout << x;
}
int main(int argc, const char * argv[])
{
int x;
cin >> x;
f(x);
g(x);
}
И что мы видим?
main PROC ; COMDAT
; 18 : {
$LN8:
sub rsp, 40 ; 00000028H
; 19 : int x;
; 20 : cin >> x;
lea rdx, QWORD PTR x$[rsp]
lea rcx, OFFSET FLAT:?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A ; std::cin
call ??5?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@AEAH@Z ; std::basic_istream<char,std::char_traits<char> >::operator>>
; 10 : cout << x;
mov edx, DWORD PTR x$[rsp]
lea rcx, OFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
call ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z ; std::basic_ostream<char,std::char_traits<char> >::operator<<
; 14 : cout << x;
mov edx, DWORD PTR x$[rsp]
lea rcx, OFFSET FLAT:?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A ; std::cout
call ??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@H@Z ; std::basic_ostream<char,std::char_traits<char> >::operator<<
; 21 : f(x);
; 22 : g(x);
; 23 : }
xor eax, eax
add rsp, 40 ; 00000028H
ret 0
main ENDP
Именно то, что я и говорил: вызова как такового нет, функция заинлайнена, все строго одинаково...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
В Gson имеется такая возможность как полный контроль над этапом Serializer и Deserializer объекта
На сервере лежат довольно большие файлы в формате mp3, есть необходимость прослушать их не с начала, а с определенного местаПри вызове seekTo()...