Где лучшее место для объявления переменных?

Я пытаюсь оптимизировать программу на C ++, которую я реализовал, и возник вопрос …
Где я должен объявить переменную, если у меня есть повторяющаяся структура, использующая ее?

Например:

//1-> int sum;
int matrix[10][10];

for(int i = 0; i < n; i++){
//1-> sum=0;
//2-> int sum=0;
for(int j = 0; j < n; j++)
sum += matrix[i][j];

printf("%d ", sum);
}

Так что лучше / рекомендуется? Должен ли я объявить это в начале // -> 1 за пределами повторяющейся структуры, или это нормально, если повторно объявлено // -> 2 на каждой итерации?
Я предполагаю, что объявление занимает очень небольшое время (миллисекунды или меньше), но если вы переопределите его в достаточно большой повторяющейся структуре (или внутри нескольких структур), то каждое объявление будет складываться в дополнительные секунды.

0

Решение

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

5

Другие решения

Это не важно Стек (зарезервированное пространство в памяти) выделяется все вместе в начале функции / метода. Если это объект, конструктор и деструктор будут вызваны где-то в области действия вашего цикла. Но для элементарных типов нет абсолютно никакой разницы.

2

Как уже говорили другие, это в основном не имеет значения для int,

Здесь есть только две вещи:

  1. читабельность
  2. Объем

Если int объявлено прямо перед for цикл, а не как первая строка for цикл, читаемость, вероятно, примерно то же самое. Кроме того, многие компиляторы будут иметь ярлык для быстрого перехода к объявлению.

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


Примечание о моих личных предпочтениях, которое сочетает в себе проблемы с областью видимости и читабельностью. Когда я пишу код, я предпочитаю иметь КАЖДУЮ переменную, которую я буду использовать в заданной области, объявленной в начале этой области. Любая переменная, которую я использую в main объявлен в верхней части main, Любая переменная, используемая в функции, объявляется в верхней части этой функции. Любая переменная, используемая в цикле, объявляется в верхней части этого цикла. Любая переменная, используемая в if Заявление объявлено в верхней части этого if заявление. Я лично делаю очень мало исключений. Так что в вашем случае, если scope из sum ограничен исключительно вашим for цикл, я бы объявил его в качестве первой переменной for петля. Если sum нужна область вне цикла, я бы объявил ее в верхней части любой функции, в которой вы находитесь, и дал бы ей гораздо более описательное имя.

1
По вопросам рекламы [email protected]