Разница между 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}; НЕ компилирует и не сохраняет проблемы.