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

Я пытаюсь оптимизировать программу на 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 на каждой итерации? Я предполагаю, что объявление занимает очень небольшое время (миллисекунды или меньше), но если вы переопределите его в достаточно большой повторяющейся структуре (или внутри нескольких структур), то каждое объявление будет складываться в дополнительные секунды.

3 ответа

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

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

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

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

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

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

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


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

Другие вопросы по тегам