Вот выдержка из кода.
std::map<double, double> 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 в режиме отладки?Я не понимаю, что другие говорили об этом поведении правильно?Является ли построение по умолчанию новых элементов чем-то, что не обязательно является частью стандарта?Или это может быть реальной ошибкой в компиляторе?