Вот отрывок из кода.
std::map temp;
temp[0] = .1;
cout << temp[1] << endl;
// result varies based on compiler
Я компилирую с использованием GCC версии 4.4.1 и получаю значение 0 из temp [1]
, как я и ожидал. Мой коллега компилирует GCC версии 4.5.1. В режиме отладки (с флагом -g
) он получает 1000
. При компиляции режима выпуска (флаг -O2
) он получает 0
.
Я считаю, что проблема этого типа обычно возникает с неинициализированными переменными, за исключением того, что карты должны вызывать конструктор по умолчанию для своих элементов, на основе этого вопроса и некоторых других подобных.
Более того, Стандартная библиотека C ++ Джозаттиса утверждает, что
Если вы используете ключ в качестве индекса, для которого еще не существует элемента, новый элемент получает вставляется на карту автоматически. Значение нового элемента инициализируется конструктором по умолчанию своего типа.
Почему элементы карты не инициализируются в GCC 4.5.1 в режиме отладки? Я не понимаю, что другие правильно сказали об этом поведении? Является ли построение новых элементов по умолчанию чем-то, что не обязательно является частью стандарта? Или это может быть фактическая ошибка компилятора?