LINUX.ORG.RU

История изменений

Исправление 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?