【发布时间】:2011-12-20 04:33:04
【问题描述】:
你好,祝你有美好的一天。
标准 C++ std::map<Key, Value> 类是否需要具有以下属性:
- 如果Value 没有
operator=或operator=是私有的(并且std::map不是Value 的私人朋友),它可以工作。 - 如果 Value 没有默认构造函数或默认构造函数是私有的(并且
std::map不是 Value 的私有朋友),它可以工作
我为什么要问 - 我被要求为在内部使用 std::map 的类编写一个替代品。在过程中,结果证明该类应该在没有operator= 的情况下工作(只要你避免map[key] = value;)。我对operator= 要求进行了核对,但结果证明对 Value 使用默认构造函数也会导致一些问题 (o_O),因为应该是 Value 的类没有默认构造函数。那么......是std::map 的那些标准属性,还是依赖于特定于实现/未定义行为的原始类?我检查了“C++ 标准 - ANSI ISO IEC 14882 2003”,但找不到任何此类要求。我可能也可以核对“默认构造函数要求”(只要用户避免某些调用,例如调用 map[key] 以获得不存在的键),但我之前肯定没有听说过 std::map 的这些属性。 .
那么……你怎么看?
【问题讨论】:
标签: c++ stl map standards undefined-behavior