根据C++ 03 Standard(23.1/3),只能将可复制构造的类对象存储在STL容器中。可复制构造在20.1.3中进行了描述,并要求“&”产生对象的地址。

现在假设我有这个课:

class Class {
public:
   Class* operator&()
   {
       //do some logging
       return this;
   }
   const Class* operator&() const
   {
       //do some logging
       return this;
   }
   //whatever else - assume it doesn't violate requierements
};

此类对象可以合法地存储在STL容器中吗?

最佳答案

是的。在C++ 03中,给定&类型的tT类型的u的值const T的CopyConstructible要求为:

  • &t的类型为T*,并提供t
  • 的地址
  • &u的类型为const T*,并提供u的地址。

  • 您的重载运算符(operator)具有此行为;因此,假设该类满足其他CopyConstructible和Assignable要求,则此类型的值可以存储在任何C++ 03容器中。

    C++ 11放宽了这些要求,要求类型只能在有特殊要求的容器或操作中移动或复制,并删除&必须做什么的相当奇怪的规范;因此,您的类(class)还是不错的,再次假设它满足您所使用的特定容器和操作集的所有其他要求。

    09-09 23:42
    查看更多