首页 > 解决方案 > 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。这可能是基本的,我确定我展示了它已经过了多长时间,但我错过了什么?

标签: c++stdmap

解决方案


默认情况下,类的所有成员都是私有的,而 struct 中的所有成员默认都是公共的,因此不允许通过列表初始化程序对类中的成员变量进行默认值初始化。请参考此链接以获得更好的理解。

希望这可以帮助你


推荐阅读