Передача объекта по ссылке - это более простой, быстрый и безопасный способ передать ему адрес. Но для большинства компиляторов это одно и то же: ссылки на самом деле являются указатели.
А как насчет базовых типов, таких как int
? Передача адреса в int
и использование его внутри функции будет медленнее, чем передача его копированием, потому что перед использованием указатель необходимо разыменовать.
Как современный компилятор обрабатывает это?
int foo(const int & i)
{
cout << i; // Do whatever read-only with i.
}
Могу ли я доверить им компилировать это в это?
int foo(const int i)
{
cout << i;
}
Кстати, в некоторых случаях может быть даже быстрее передать оба i
и & i
, затем используйте i
для чтения и * i
для записи.
int foo(const int i, int * ptr_i)
{
cout << i; // no dereferencement, therefore faster (?)
// many more read-only operations with i.
*ptr_i = 123;
}