gpt4 book ai didi

c++ - 在 C++ 中,在 STL 容器中存储具有重载 "operator&"的类对象是否合法?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:26 35 4
gpt4 key购买 nike

根据 C++03 标准 (23.1/3),只有 copy-constructible 类对象可以存储在 STL 容器中。 Copy-constructible 在 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 中,& 的 CopyConstructible 要求,给定 T 类型的值 tu 类型的值const T,是:

  • &t 的类型为T*,并给出t的地址,并且
  • &u 的类型为const T*,并给出u 的地址。

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

C++11 放宽了这些要求,要求类型只能在容器或有此类要求的操作中移动或复制,并删除了相当奇怪的 & 必须做什么的规范;所以你的类仍然很好,再次假设它满足你使用的特定容器和操作集的所有其他要求。

关于c++ - 在 C++ 中,在 STL 容器中存储具有重载 "operator&"的类对象是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8654649/

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