gpt4 book ai didi

c++ - std::map 属性 - C+ 标准要求?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:57:15 25 4
gpt4 key购买 nike

你好,祝你有美好的一天。

标准 C++ std::map<Key, Value> 是否属实(标准是否要求)?类必须具有以下属性:

  • 如果 Value 没有 operator= 就可以工作或 operator=是私有(private)的(并且 std::map 不是 Value 的私有(private) friend )。
  • 如果 Value 没有默认构造函数或默认构造函数是私有(private)的(并且 std::map 不是 Value 的私有(private)友元)

为什么我要问 - 我被要求为内部使用 std::map 的类编写一个替代品。在过程中,事实证明该类(class)应该在没有 operator= 的情况下工作(只要你避免 map[key] = value; )。我核了 operator=需求,但事实证明,为 Value 使用默认构造函数也导致了一些问题 (o_O),因为应该是 Value 的类没有默认构造函数。所以... std::map 的那些标准属性,还是原始类依赖于特定于实现/未定义的行为?我检查了“C++ 标准 - ANSI ISO IEC 14882 2003”,但找不到任何此类要求。我可能也可以核对“默认构造函数要求”(只要用户避免某些调用,例如为不存在的键调用 map[key]),但我之前当然没有听说过 std::map 的此类属性。 .

那么……你怎么看?

最佳答案

根据我对标准的阅读(23.2.4 [associative.reqmts] 在 C++11 中,但已经在 C++03 中持有),V DefaultConstructibleV CopyAssignable 不是实例化容器本身的强制要求,只是为了使用它的一些操作。

但是在 C++03 中,对于所有标准容器,V 必须是 CopyConstructible。无条件的。在 C++11 中,取消了这一要求,因为可以使用新的 emplace* 方法直接就地构建对象。

关于c++ - std::map 属性 - C+ 标准要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978662/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com