Я попытался найти дубликат, который объясняет, как C++
использует вызов по значению.
В C ++ параметр функции типа T
сделает копию объекта до того, как функцияПозвонил.
int myFunction( int value )
{
value = value + 1;
}
int main( int argc, char * argv[] )
{
int elem = 6;
myFunction( elem );
printf( "%d\n", elem ); // elem = 6;
}
В приведенном выше примере создается копия int
значения, которое отправляется на myFunction
, и копия увеличивается.
Это не может бытьчто нужно, и мы можем изменить результат на 7, изменив myFunction
, чтобы получить ссылку на значение.Это делается с помощью символа «&» для описания ссылочного значения.
int myFunction( int & value )
{
value = value + 1;
}
int main( int argc, char * argv[] )
{
int elem = 6;
myFunction( elem );
printf( "%d\n", elem ); // elem = 7;
}
В приведенном выше случае копия не создается, а elem обновляется.
Существует две основные причиныВы передаете ссылки на функцию
- Чтобы разрешить обновление значения (или объекта).
- Чтобы избежать затрат на копирование значения.
В приведенном вами примере во втором случае используется const string &
(ссылка на строковый объект).std::string
, имеет затраты на создание и уничтожение, поэтому отправка ссылки, чтобы избежать этого, более эффективна.
Чтобы дополнить это использование, ссылка обычно делается const
, чтобы убедить компилятор в том, чтозначение не должно быть изменено.