sha*_*oth 6 c++ stl operator-overloading
根据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
};
Run Code Online (Sandbox Code Playgroud)
这个类对象可以合法地存储在STL容器中吗?
是.在C++ 03中&,给定t类型T和u类型的值的CopyConstructible要求const T是:
&t有类型T*,并给出地址t,和&u有类型const T*,并给出地址u.您的重载运算符具有此行为; 因此,假设该类满足其他CopyConstructible和Assignable要求,则此类型的值可以存储在任何C++ 03容器中.
C++ 11放宽了这些要求,要求这些类型只能在具有这些要求的容器或操作中移动或复制,并删除&必须做的相当奇怪的规范; 所以你的课程仍然很好,再次假设它满足你使用的特定容器和一组操作的所有其他要求.
| 归档时间: |
|
| 查看次数: |
196 次 |
| 最近记录: |