【发布时间】:2022-01-11 17:33:24
【问题描述】:
我用我的代码发布了一个问题,其唯一的#include 指令如下:
#include <bits/stdc++.h>
我的老师告诉我这样做,但在 cmets 部分我被告知我不应该这样做。
为什么?
【问题讨论】:
-
嗯。我应该知道在某个地方会有一个包含版本的
using namespace std;。 -
为什么这个头文件还存在?肯定没有一个标准实际上包括这个,因为它会带来很多垃圾?如果它没有被任何公共包含...那么为什么它会在发行版中发布?
-
@ChrisBeck:这是一个实现细节。它不是“公共 API”的一部分,也不是供使用的。但它仍然必须运送,否则任何事情都不会奏效。标准包含可能不会单独使用它,但它可以用于预编译头文件。查看顶部的注释,上面写着:“这是一个预编译头文件的实现文件。”.
-
@LightnessRacesinOrbit “它不是“公共 API”的一部分,也不打算使用。” 完全错误,它是作为预编译头文件供公众使用的。 Libstdc++(预)编译并安装该头文件的预编译版本,因此如果您包含它,那么 G++ 实际上将包含
bits/stdc++.h.gch,而不是预编译版本。它之所以存在是因为它必须存在才能生成它的预编译版本。 -
@JonathanWakely 标准库的公共 API,我的意思是;不是 libstdc++。每天(以及在他们的项目中)在 Stack Overflow 上使用它的人并没有因为您正在谈论的原因或用例而使用它。当然,我的评论可能措辞更准确,但请注意,我确实指出了它用于预编译头文件。随意写一个有竞争力的答案。
标签: c++ portability turbo-c++ c++-faq implementation-defined-behavior