【发布时间】:2020-09-09 20:59:54
【问题描述】:
我知道技术上的答案是:因为标准是这样说的。
但我对动机感到困惑:
我在默认的<=> 中没有看到任何“库”:它可能会返回某种在技术上定义在std 中的类型,但在某种意义上它是一个“假库”类型,编译器必须know 关于它因为它必须能够默认 operator <=> 和 auto 返回类型(更不用说好的编译器中的错误消息指定 <compare> 所以很明显这里有一个语言库链接)。
所以我知道有一些library functionality 可能需要我包含<compare>,但我不明白为什么默认<=> 需要我包含该标头,因为无论如何编译器都必须知道制作@ 所需的一切987654330@。
注意:我知道大多数时候其他一些标准标题会包含<compare>,这是一个关于语言/库设计的问题,而不是关于 C++ 强迫我在没有充分理由的情况下编写的额外行。
【问题讨论】:
-
可能与您需要包含
<new>以使用放置新语法的原因相似。 -
与
<typeinfo>相同,只需使用typeid。 -
@eerorika 有趣的是,您无需包含
<new>即可使用默认的非放置operator new。因此,似乎没有技术上的理由来强制用户包含这些内置操作的标头。 -
"它是“假库”类型" 没有这样的东西。类型要么是编译器定义的基本类型,要么不是。
-
@Brian
new是语言关键字,因此没有标题。但是placement-new可以被用户重载,其中<new>定义了默认的placement-new
标签: c++ c++20 spaceship-operator