c++ - C++ std::maps 和带有构造函数的类值
问题描述
自从我看到 C++ 以来已经有很长一段时间了——30 多年了,显然,情况发生了很大变化。我也被 Scala、Julia 等宠坏了,它们在幕后处理了这种魔法,但是......不再......我试图弄清楚为什么这不起作用:
class Foo {
uint_fast8_t val1;
std::string name;
uint_fast16_t val2;
};
std::map<std::string, Foo> myMap;
myMap["Test"] = { 1, "Test2", 2 };
这无法编译,因为需要重载几个运算符才能使 map 工作。请注意,这发生在定义了构造函数的情况下,例如
Foo(uint_fast8_t v1, std::string s, uint_Fast16_t v2) { };
如果我只是做一个
myMap["Test"] = Foo()
这是有效的,因为构造函数具有预期的参数数量(0)而不是 3。这可能是基本的,我确定我展示了它已经过了多长时间,但我错过了什么?
解决方案
默认情况下,类的所有成员都是私有的,而 struct 中的所有成员默认都是公共的,因此不允许通过列表初始化程序对类中的成员变量进行默认值初始化。请参考此链接以获得更好的理解。
希望这可以帮助你
推荐阅读
- r - 我创建的函数中的变量没有保存在环境中
- c++ - C++ 继承具有自己的类内结构的模板类
- python - Django 中的 Slug 和日期字段问题的唯一问题
- reactjs - 您应该在什么级别检索数据?
- javascript - 页面加载的 Keyup 替代方案
- java - 如何检查两个集合是否包含相同的对象
- javascript - 如何手动触发或模仿guildMemberAdd
- mysql - MySQL - 自动递增字段中的重复值
- java - 将 EventBus 与 ViewPager 一起使用时,有时会出现“已添加片段”
- java - 如何将 grails 与 mysql 连接以及为什么 grails compile 显示:compileJava NO-SOURCE