История изменений
Исправление sniper21, (текущая версия) :
пример по второй ссылке:
void f1(const string& s); // OK: pass by reference to const; always cheap
void f2(string s); // bad: potentially expensive
void f3(int x); // OK: Unbeatable
void f4(const int& x); // bad: overhead on access in f4()
первое понятно - передача по ссылке длинной строки (много памяти) как константы, так как она не изменяется в теле функции. второе - делать копию строки дейстительно может быть накладно. третье - простое число и передача по значению займет немного памяти и удобно.
почему четвертое - bad? Всмысле откуда overhead - при передаче строки в первом пункте все нормально же.
Исправление sniper21, :
пример по второй ссылке:
void f1(const string& s); // OK: pass by reference to const; always cheap
void f2(string s); // bad: potentially expensive
void f3(int x); // OK: Unbeatable
void f4(const int& x); // bad: overhead on access in f4()
первое понятно - передача по ссылке длинной строки (много памяти) как константы, так как она не изменяется в теле функции. второе - делать копию строки дейстительно может быть накладно. третье - простое число и передача по значению займет немного памяти и удобно.
почему четвертое - bad?
Исходная версия sniper21, :
пример по второй ссылке:
void f1(const string& s); // OK: pass by reference to const; always cheap
void f2(string s); // bad: potentially expensive
void f3(int x); // OK: Unbeatable
void f4(const int& x); // bad: overhead on access in f4()
первое понятно - передача по ссылке длинной строки (много памяти) как константы, так как она не изменяется в теле функции. второе - делать копию строки дейстительно может быть накладно. маленькое передача по значению немного памяти и удобно.
почему четвертое - bad?