根据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中,给定&
类型的t
和T
类型的u
的值const T
的CopyConstructible要求为:
&t
的类型为T*
,并提供t
和&u
的类型为const T*
,并提供u
的地址。 您的重载运算符(operator)具有此行为;因此,假设该类满足其他CopyConstructible和Assignable要求,则此类型的值可以存储在任何C++ 03容器中。
C++ 11放宽了这些要求,要求类型只能在有特殊要求的容器或操作中移动或复制,并删除
&
必须做什么的相当奇怪的规范;因此,您的类(class)还是不错的,再次假设它满足您所使用的特定容器和操作集的所有其他要求。