Недавно я был потрясен этим:
#include <map>
#include <string>
#include <iostream>
using namespace std;
int main() {
map<string, string> strings;
strings["key"] = 88; // surprisingly compiles
//map<string, string>::mapped_type s = 88; // doesn't compile as expected
cout << "Value under 'key': '" << strings["key"] << "'" << endl;
return 0;
}
Он печатает 'X', который является 88 в ASCII.
Почему строковая карта принимает значения ints как значения? В документации для map operator[]
говорится, что он возвращает mapped_type&
, который в этом случае равен string&
и не имеет неявного преобразования из int
, не так ли?