gpt4 book ai didi

C++11 初始化 map

转载 作者:IT老高 更新时间:2023-10-28 21:35:53 31 4
gpt4 key购买 nike

我正在尝试使用 C++11 语法初始化 STL 映射,但这似乎不起作用。初始化后,当我尝试访问元素时,它会尝试调用 Foo 的私有(private)构造函数。我错过了什么?如果我使用它,它会起作用。我想知道是否可以使用 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[] 时,您可以使用运算符从 map 中获取值或将值分配给 map 。为了将值赋给映射,映射必须构造其值类型的对象,并通过引用返回它,这样您就可以使用 operator= 覆盖现有对象。

因此,该类型必须是默认可构造的,以便可以创建一个新对象供您分配。

在运行时,如果键已经存在,则不会调用构造函数,但编译器无法知道您是否会使用 operator[] 来访问不存在的值'不存在,所以它要求构造函数是公开的。

关于C++11 初始化 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10940951/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com