我尝试使用C++11语法来初始化STL map,但好像不起作用。在初始化之后,当我尝试访问元素时,它会尝试调用Foo的私有构造函数。我错过了什么吗?如果我使用at,它可以工作。我想知道是否可以使用operator[]来访问初始化的值...
#include <map>
#include <string>
class Foo{
public:
int a, b;
Foo(int a_, int b_){
a = a_;
b = b_;
}
private:
Foo(){};
};
int main(){
std::map<std::string, Foo> myMap = { {"1", Foo(10,5)}, {"2", Foo(5,10)} };
int b = myMap["1"].b; // it tries to call private constructor of Foo.
return 0;
}
map<>::operator[]
(§23.4.4.3/2,6)要求“具有默认构造函数”(DefaultConstructible
concept)。 - ildjarnoperator []
,并在没有默认构造函数的情况下SFINAE掉非const版本。不过这可能会非常令人困惑;新的at()
显然是更好的解决方案。 - JohannesD