Я нашел кое-что на инструменты Visual Studio v143 std:С++ последний это ошибка или что
std::unordered_map<std::string, std::string> map;
std::string test_str = "1234567890123456789012345678901234567890123456789012345";//55 LEN String
map["test_len"] = test_str.length();
std::cout << map["test_len"]; // 7 on 55 len string
Обновлено: во всех числах одинаково. Chrome будет работать, даже если Content-Lenght недействителен.





Вы пытаетесь поместить length() на карту string -> string. Вместо этого вам нужно поставить to_string():
#include <unordered_map>
#include <string>
#include <iostream>
int main() {
std::unordered_map<std::string, std::string> map;
std::string test_str = "1234567890123456789012345678901234567890123456789012345";//55 LEN String
map["test_len"] = std::to_string(test_str.length());
std::cout << map["test_len"];
}
Обратите внимание, что у std::string есть ctor от char, как в ответе Максима, поэтому ваш код не является ошибкой, просто он не такой, каким вы ожидали.
В заявлении
map["test_len"] = test_str.length();
std::unordered_map::operator[] по умолчанию создает новый std::string и возвращает ссылку на него, которая затем присваивается значению типа size_type. Это присваивание вызывает std::string::operator=(char), которое интерпретирует целочисленное значение 55 как символ ascii 7.
Это давняя ошибка юзабилити в интерфейсе std::string. Примеры бага:
std::string s = test_str.length(); // Compiler error.
std::string s2;
s2 = test_str.length(); // Compiles successfully, std::string interface bug.
s2 = true; // Compiles successfully, std::string interface bug.
s2 = std::ios_base::failbit; // Compiles successfully, std::string and std::ios_base interface bugs.
std::string s3{std::ios_base::failbit, 55, true, 'a'}; // Compiles successfully, std::string interface bug.
std::string s3 = {std::ios_base::failbit, 55, true, 'a'}; // Compiles successfully, std::string interface bug.
Типобезопасный способ С++ 17 для вставки или присвоения значения в ассоциативный контейнер:
map.insert_or_assign("test_len", test_str.length()); // Compiler error.
map.insert_or_assign("test_len", {std::ios_base::failbit, 55, true, 'a'}); // Compiler error.
map.insert_or_assign("test_len", std::to_string(test_str.length())); // Success.
Вы видите символ со значением 55 в ASCII, он же
'7'. Вместо этого вы, вероятно, хотелиstd::unordered_map<std::string, int>.