Изменение аргументов, 'переданных значением' в функции и использование их как локальные переменные

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

Действительно ли это - хорошая вещь сделать? Есть ли какие-либо ловушки выполнения этого, или это в порядке для кодирования как это?

11
задан Jay 21 January 2010 в 11:30
поделиться

2 ответа

По сути, параметр функции - локальная переменная, поэтому эта практика неплохая в принципе.

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

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

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

9
ответ дан 3 December 2019 в 09:41
поделиться

Нет проблем вообще, о которых я могу думать. Аргументы будут либо размещены в текущем кадре стека или в регистрах, как и любая другая локальная переменная. Убедитесь, что аргументы передаются по значению, однако. В частности, массивы проходят посредством ссылки.

2
ответ дан 3 December 2019 в 09:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: