Ответ Rep_Movsd упрощен и может привести к многочисленным чрезвычайно опасным заблуждениям. Примитивные типы данных в C ++ не имеют инициализаторов. У Луи Бренди был замечательный доклад, в котором он обсуждал множество распространенных ошибок C ++, допущенных в Facebook, и недоразумение о том, как работает std :: map <> [], было одной из обсуждаемых ошибок, это отличный ресурс, хотя он и не разобраться, как на самом деле работает std :: map <> [].
Как правило, целые числа не инициализируются и не определены, как все типы примитивов. Это сказанное, когда используется с std :: map <> [], int имеет значение по умолчанию ноль, установленное через процесс, названный инициализацией значения. Инициализация значения - это процесс, который на самом деле работает со структурами в целом. Например,
struct Struct {
Struct() : memberVariable() {}
int memberVariable;
};
Всегда инициализирует int нулем. Если бы переменные-члены были другими примитивными типами, они также имели бы определенные значения инициализации. Например, следующие типы инициализируются посредством инициализации значения следующим образом:
bool = false
float = 0.0f
enum = (тип enum) 0
указатель = нулевой указатель
указатель на член = нулевой указатель на член
Будьте предельно осторожны при работе с данными, которые не были явно инициализированы. И последнее, рассмотрим следующий код
map<string, int> myMap;
cout << myMap["Foo"];
Этот код не только всегда инициализирует целое число 0, но также вставляет 0 в карту. Для простоты, примитивные типы данных не определены, если не инициализированы, но в некоторых случаях, например, при инициализации значения структуры или карты инициализируются примитивные данные с определенным значением.