November 28, 2020

Инициализация переменных в С++

Существует два очень похожих понятия: объявление и определение.

Объявление - это описание сущности. Объявление уведомляет компилятор о ее существовании и свойствах.

int x;
double y;

При объявлении переменной мы можем присвоить ей значение в этот же момент. Это называется инициализацией переменной.

Существует 3 способа инициализации переменной в С++.

  • Способ №1: Копирующая инициализация (или «инициализация копированием») с помощью знака равенства =:
int x = 5; // копирующая инициализация
  • Способ №2: Прямая инициализация с помощью круглых скобок ():
int x(5); // прямая инициализация

Способ №3: Uniform инициализация с помощью фигурных скобок {}:

int x{5}; // uniform инициализация

Прямая или копирующая инициализация работают не со всеми типами данных (например, вы не сможете использовать эти способы для инициализации списка значений). В попытке обеспечить единый механизм инициализации, который будет работать со всеми типами данных, в C++11 добавили uniform-инициализацию.

В uniform-инициализации есть одно важное преимущество: вы не сможете присвоить переменной значение, которое не поддерживает её тип данных — компилятор выдаст предупреждение или сообщение об ошибке. Например:

int x{4.3}; // ошибка компилятора

Однако, если вы уже создали переменную и хотите присвоить ей значение (не в момент объявления), то будет работать только копирующая инициализация:

int x;
x = 4; 

В одном выражении можно объявить сразу несколько переменных одного и того же типа данных, разделяя их имена запятыми. Кроме того, вы даже можете инициализировать несколько переменных в одной строке:

int a = 1, b = 2;
int c(3), d(4);
int e{5}, f{6};

 Где объявлять и инициализировать переменные?

Более старые версии компиляторов языка Си вынуждали пользователей объявлять все переменные в верхней части функции. Сейчас это уже неактуально. Современные компиляторы не требуют, чтобы все переменные обязательно были объявлены в самом верху функции. В языке С++ приоритетным является объявление, а также инициализация переменных как можно ближе к их первому использованию.

int main() {
    cout << "Enter a number: ";
    int x;
    cin >> x;
    
    cout << "Enter another number: ";
    int y;
    cin >> y;
    
    cout << "The sum is: " << x + y << endl;
}

Объявляйте переменные как можно ближе к их первому использованию.

Что касается присвоения значений прееменным, то рекомендуется инициализировать переменные, когда они определены, например int i = 0;, и переменные следует всегда инициализировать перед использованием.