你好,祝你好运。
这是否正确(标准是否需要)标准C ++ std::map<Key, Value>
类需要具有以下属性:
operator=
或operator=
是私有的,并且std::map
不是 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之前的这些属性...
那么......你觉得怎么样?
答案 0 :(得分:2)
从我对C ++ 11中的标准( 23.2.4 [associative.reqmts] 的阅读,但已经在C ++ 03中保留),V
为{{ 1}}和DefaultConstructible
V
不是实例化容器本身的强制要求,而只是使用它的一些操作。
但是在C ++ 03中,CopyAssignable
对于所有标准容器必须是V
。无条件。在C ++ 11中,这个要求被取消了,因为可以使用新的CopyConstructible
方法直接构建对象。