Инициализация переменных в С++
Существует два очень похожих понятия: объявление и определение.
Объявление - это описание сущности. Объявление уведомляет компилятор о ее существовании и свойствах.
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
;, и переменные следует всегда инициализировать перед использованием.