Map::operator[] 总是需要默认构造函数

Map::operator[] always requires a default constructor

#include <iostream>
#include <string>
#include <map>
using namespace std;

class x{
  public:
  string s;
  //x(){cout<<"default"<<endl;}
  x(string s=""):s(s){cout<<"mine"<<endl;}
};

int main()
{
  map<int,x> m;
  m.insert(pair<int,x>(1,x("me")));
  cout<<m[1].s<<endl;
}

我知道 map::operator[] 在元素不存在时需要默认 cst,但是

m[1] 在没有默认 cst 的情况下给出错误 class x in apple clang,即使 m[1] 的元素已经存在。为什么?

I understand that map::operator[] requires default cst for when element is not present, [...]

这不太正确。

map::operator[] 始终需要默认构造函数,因为该元素可能不存在。它是否实际存在并不重要,因为 map<T> 是否具有 operator[] 已经在编译时决定。