Headers can - and often do - include other headers. Standard library headers are no exception to this.
即使您选择不包含a
您所依赖的标头(让我们命名它),该标头也可能碰巧被b
您确实包含的另一个标头(让我们命名它)包含。在这种情况下,如果标头b
被修改为不包含a
. 这就是为什么您必须始终包含您所依赖的所有标头 - 即使您的程序看起来可以在不包含其中某些标头的情况下工作。
标准库的不同实现的所有不同版本都是不同的,因此a
在一个版本中可以包含b
,而a
在另一版本中也可以不包含b
。这同样适用于具有多个实现版本的所有 API。