你好,祝你有美好的一天。std ::地图属性 - C +标准要求?
这是真的(是由标准的要求),该标准C++ std::map<Key, Value>
类必须具有以下特性:
- 它可以工作,如果价值没有
operator=
或operator=
是私有的(和std::map
是不是的私人朋友值)。 - 它可以工作,如果价值没有默认构造函数或默认构造函数是私有的(和
std::map
不是一个私人朋友的价值)
为什么我在问 - 我一直在问到为内部使用std :: map的类编写一个嵌入式替换。在IN过程中,事实证明该班级应该在没有operator=
的情况下工作(只要您避免map[key] = value;
)。我nuked operator=
要求,但事实证明,使用默认的构造函数值也造成了一些问题(o_O),因为类应该是值没有默认的构造函数。那么......是那些std::map
的标准属性,还是原始类依赖于实现特定/未定义的行为?我检查了“C++标准 - ANSI ISO 14882 2003”,我找不到任何这样的要求。我可能也可以核实“默认构造函数的要求”(只要用户避免某些调用,例如调用map[key]
为不存在的键),但我当然没有听说过std :: map的这些属性...
所以...你觉得怎么样?
标准(C++ 03)指定哪些操作需要'V'为'DefaultConstructible'? – SigTerm
'map [key]'需要默认的构造函数,因为如果'key'不存在,将会在地图中插入一个默认构造的实例。 - 这个代码路径需要存在,即使从未在运行时获取。 – visitor
@SigTerm:是的,实际上每个操作都会详细说明各种需要遵守的要求(在一般要求之上)。大多数情况下,他们可以用一些逻辑来推断:) –