Создаю глобальную константную мапу и пытаюсь взят её элемент через опертаор [ ] в константную переменную, но компилятор говорит, что так нельзя. Какие ограничения не позволяют компилятору это сделать? Т.е. интересует именно причина, а не то как это обойти.
const std::unordered_map<int, string> MapWithModulesNames{
{1, string{"LegacyBssManager"}},
{2, string{"BsSettings"}},
};
int main() {
const string a = MapWithModulesNames[1];
system("PAUSE");
return 0;
}
У std::map
нет константного operator[]
, потому что этот оператор создаёт элемент карты, если такого ключа ещё нет в оной. Если нужен доступ именно к существующему элементу, тогда нужно использовать at
.
Проблема в том, что оператор []
неконстантный, и возвращает неконстантную ссылку. Поэтому к константному unordered_map
он неприменим...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок