我知道技术上的答案是:因为标准规定如此。但我对其动机感到困惑:
我认为在默认
因此,我理解存在一些库功能可能需要我包含
注意:我知道大多数情况下其他标准头文件将包含
我认为在默认
<=>
时没有任何"库"的东西:它可能会返回一些在std
中技术上定义的类型,但从某种意义上说,它是一个"虚假的库"类型,因为编译器必须知道它,因为它必须能够使用auto
返回类型来默认operator <=>
(更不用说好的编译器中的错误消息指定了<compare>
,因此这里明确存在语言<=>库链接)。因此,我理解存在一些库功能可能需要我包含
<compare>
,但我不明白为什么默认<=>
要求我包含该头文件,因为编译器无论如何都必须知道制作<=>
所需的所有内容。注意:我知道大多数情况下其他标准头文件将包含
<compare>
,这是关于语言/库设计的问题,而不是C++强制我写一行没有充分理由的额外代码的问题。
<new>
才能使用放置new语法一样。 - eerorika<typeinfo>
,它是使用typeid
所必需的。 - DeiDei<new>
就可以使用默认的非放置operator new
。因此,似乎没有技术上的理由强制用户包含这些内置操作的头文件。 - Brian Binew
是一种语言关键字,因此没有相应的头文件。但是用户可以重载placement-new
,其中<new>
定义了默认的placement-new
。 - Remy Lebeau