Я понял, что int x{};
является своего рода инициализацией по умолчанию, но точно ли это как писать int x = 0;
?
Разница между int x {}; и int x = 0;?
Ответ 1
В этом случае результат будет таким же.
int x{};
является своего рода инициализацией по умолчанию
Не совсем. См. инициализация по умолчанию.
int x{};
инициализация значений (начиная с С++ 11),
Это инициализация, выполняемая при построении переменной с пустым инициализатором.
И эффекты инициализации значения в этом случае (т.е. ни тип класса, ни тип массива):
4), в противном случае объект с нулевой инициализацией.
Наконец, эффекты нулевой инициализации в этом случае:
Если T является скалярным типом, начальное значение объекта является интегралом постоянный нуль, явно преобразованный в T.
С другой стороны, int x = 0;
является инициализация копирования; x
инициализируется значением 0
.
Как упоминал @PaulR, существует разница, что int x{};
поддерживается только из С++ 11, а int x = 0
не имеет такого ограничения.
Ответ 2
В этом случае они идентичны. int x{}
будет инициализировать x
так же, как static int x
; то есть к нулю. Тем не менее, я нахожу int x = 0
clearer, и он имеет то преимущество, что он работает со старыми стандартами С++.
Ответ 3
Они оба то же самое. Они оба будут инициализированы до 0
.
#include <iostream>
#include <string>
using namespace std;
int main()
{
int y{};
int x = 0;
cout << "y: " << y << endl;
cout << "x: " << x << endl;
return 0;
}
ВЫВОД:
y: 0
x: 0
Ответ 4
Есть разница: int x = 1,888; будет работать с x как 1. Много проблем позже. Все профессиональные ребята когда-нибудь столкнулись, в коде их или других.
но int x {1.888}; НЕ компилирует и не сохраняет проблемы.