Почему записи этой карты STL не инициализируются в GCC 4.5.1?

Вот отрывок из кода.

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

7
задан Community 23 May 2017 в 10:08
поделиться