gpt4 book ai didi

c++ - std::addressof 是否否定 STL operator& 要求?

转载 作者:IT老高 更新时间:2023-10-28 22:59:57 25 4
gpt4 key购买 nike

为了使类型与 C++03 标准库“很好地配合”,重载 operator&() 被认为是一个坏主意,因为地址需要正确使用类型和重载它会产生意想不到的问题;这里的经典示例是 ATL::CComBSTR

  • 随着 std::addressof() 在 C++11 及更高版本中的出现,这是否否定了对标准库中使用的类型的旧要求?
  • 是否在 C++11 的标准中明确说明(或从中删除)要求,即规范是否要求标准库使用 std::addressof()

最佳答案

容器的value_type只有几个要求。它们主要取决于容器,但对于一般情况,要求至少是 MoveConstructibleMoveAssignable

查看 C++11 标准表以了解这些要求的含义,您会明白:

§ 17.6.3.1 表 20(MoveConstructible):

 +----------------------------------------------------------+
| Expression | Post Condition |
|----------------------------------------------------------+
| T u = rv; | u is equivalent to the |
| | value of rv before the construction |
+----------------------------------------------------------+
| T u(rv); | T(rv) is equivalent to the |
| | value of rv before the construction |
+----------------------------------------------------------+
| rv's state is unspecified. |
| |
+----------------------------------------------------------+

§ 17.6.3.1 表 22(MoveAssignable)。

  +-----------+--------------+-------------+----------------------+
| Expression| Return Type | Return value| Post Condition |
|-----------|--------------|-------------|----------------------|
| t = rv; | T& | t | t is equivalent to |
| | | | the value of rv |
| | | | before the assignment|
| | | | |
+---------------------------------------------------------------+
| rv's state is unspecified |
| |
+---------------------------------------------------------------+

根据容器的性质,对容器有更多要求,例如 DefaultConstructible。但是,这两个要求都不需要 operator& 不被重载。它们主要处理 value_type 的可构造性,而不是类型提供的运算符重载。

您可以在第 17.6.3.1 节找到其他表格。容器要求在 § 23 中有详细说明。

关于c++ - std::addressof 是否否定 STL operator& 要求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25521322/

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