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[]
已经在编译时决定。
#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[]
已经在编译时决定。