miredirex / oop-course

Объектно-ориентированное программирование
0 stars 0 forks source link

Замечания по программе HtmlDecode #5

Open alexey-malov opened 4 years ago

alexey-malov commented 4 years ago

https://github.com/miredirex/oop-course/blob/bd479e6108ba638b54e663b25eb4dbb737b7e93b/Task2/HtmlDecode/src/htmldecode.cpp#L3-L14

miredirex commented 4 years ago

Решил использовать фиксированный массив std::array

Но есть вопрос: пока экспериментировал с std::unordered_map и const&, увидел, что все равно можно вставлять новые элементы, даже при возвращении константной ссылки. Почему так?

std::unordered_map<std::string, char> const& GetHtmlEntitiesMap()
{
    static std::unordered_map<std::string, char> htmlEntityMap = {
        { "&quot;", '"' },
        { "&apos;", '\'' },
        { "&lt;",   '<' },
        { "&gt;",   '>' },
        { "&amp;",  '&' }
    };

    return htmlEntityMap;
}

Ниже:

auto entities = GetHtmlEntitiesMap();

entities.insert({ "foo", 'b' });

Никаких ошибок или предупреждений, и дебаггер показывает, что новый элемент присутствует

upd. разобрался. Если писать auto вместо auto const& в данном случае, то объект копируется.

alexey-malov commented 4 years ago

https://github.com/miredirex/oop-course/blob/edef5eb37aae7ba37d2c05fc3b051e8a027edbaa/Task2/HtmlDecode/src/htmldecode.cpp#L37-L46