Объявление и инициализация локальных переменных - что больше всего похоже на C ++? - PullRequest
0 голосов
/ 09 апреля 2010

Я не нашел ни одного подходящего ответа на вопросы, поэтому я хотел бы знать, что такое «лучший» стиль C ++ с точки зрения производительности и / или памяти.

Оба кода находятся внутри метода. Вопрос: когда объявлять long prio? И каковы последствия?

Код 1

while (!myfile.eof())
{
   getline(myfile, line);
   long prio = strtol(line); // prio is declared here
   // put prio in map...
   // some other things
}

Код 2

long prio; // prio is declared here
while (!myfile.eof())
{
   getline(myfile, line);
   prio = strtol(line); 
   // put prio in map...
   // some other things
}

Ответы [ 3 ]

4 голосов
/ 09 апреля 2010

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

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

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

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

1 голос
/ 09 апреля 2010

Нет никакой разницы с точки зрения производительности, но IMHO, предпочтительнее первое (декларирование в пределах области, в которой используется varaible, и использование инициализатора в объявлении переменной).

Преимущества объявления переменных, ближайших к месту их использования:

  • Они выходят за рамки, когда они больше не нужны, а это означает, что:
    • Они не будут неправильно доступны там, где они не используются, и:
    • Они будут уничтожены, когда они больше не используются (если это был пользовательский тип с деструктором)
  • Объявление видно в коде рядом с тем местом, где оно используется, что делает его более читабельным
  • Использование инициализатора в объявлении не оставляет сомнений в том, что он инициализируется перед использованием
1 голос
/ 09 апреля 2010

Всегда лучше ограничить область действия переменной тем местом, к которому осуществляется доступ. в этом случае это цикл while.

И если вас беспокоит, будет ли prio объявляться при каждом запуске цикла - :) - Я могу заверить вас, что это не так (объявление не является частью кода времени выполнения). в этом нет снижения производительности.

...