Должны ли параметры функции передаваться по ссылке часто? - PullRequest
0 голосов
/ 12 марта 2020

Передача аргумента по ссылке / с использованием указателя лучше для общей производительности программы, чем передача его в обычном режиме?

Из логики c POV это потому что нет копий уже сохраненных переменных, но так ли это на самом деле?

Я знаю, что передача каждого аргумента по ссылке может быть вредной, но я ссылаюсь на ситуации, когда передается даже простая переменная, которая позже не используется в общем коде, поэтому ее изменение даже не повлияет что угодно.

Мне было интересно, потому что я заметил, что многие коллеги-программисты используют это в своем коде.

Я просто хочу знать, я понимаю, что такие настройки не сильно ускорят программу, но это из-за моего осознания кода.

Ответы [ 2 ]

2 голосов
/ 12 марта 2020

Я знаю, что передача каждого аргумента по ссылке может быть вредной ...

Использование константной ссылки предотвратит изменение передаваемого объекта, так что это безопасно.

Является ли передача аргумента по ссылке / с помощью указателя лучше для общей производительности программы, чем при обычной передаче?

Из logi c POV это потому что нет копий уже сохраненных переменных, но так ли это на самом деле?

Ваш вопрос относится к передаваемым переменным для использования их значений, но не для их изменения:

В случае, для instace:

void test(const int& value);

Позвоните

int i;
test(i);

Различия в производительности и / или пространстве практически отсутствуют, для примитивных типов вам не нужно беспокоиться об этом.

Но если у вас объекты сложного типа, их размер перестает быть незначительным, их размер почти всегда больше, чем размер указателя, и копирование их может привести к незначительной потере производительности, в этом случае лучше передать по ссылке, вы передаете адрес этой переменной, и это позволяет избежать ненужных копии.

class Complex{
//data members inside
};

void test(const Complex& c){
    complex c;
    test(c);
}

Звоните

Complex c;
test(c);  
0 голосов
/ 12 марта 2020

Передача аргумента по ссылке / с использованием указателя лучше для общей производительности программы, чем обычная передача?

Это зависит. В некоторых случаях это лучше, чем передавать по значению, в некоторых других это хуже, а в остальных случаях это не имеет значения. Если вы хотите узнать, является ли передача значения или ссылки более быстрой в каком-то конкретном случае, вам нужно измерить.

Из logi c POV это так, потому что копий уже нет сохранено

С другой стороны, теперь вы не только копируете ссылку, но и косвенно через нее обращаетесь к объекту.

Правило большого пальца: В случае передачи аргумент без намерения сохранить копию для последующего использования, используйте ссылку, если тип не является тривиально копируемым и размер указателя или меньше. Если вы пишете шаблон и тип может быть любым, то предположите, что копирование медленно и использование ссылки.

...