每个C ++实现中都包含C ++标准库函数和类吗?

时间:2012-01-21 19:55:03

标签: c++

我只是好奇,因为在我的作业中它表示以下声明 false

  

C ++标准库函数和类不包含在每个C ++实现中。

除非你添加(#include)相应的标题,否则我认为标准库不包含在每个C ++实现中,对吧?在这种情况下,我认为上述语句是 true ,而不是 false

语句还是 false

3 个答案:

答案 0 :(得分:5)

看起来不幸的重载“include”这个词。

您的C ++编译器附带包含标准库的文件。所以他们被“包括”了。但它们不是#include - d,您必须在源文件中编写#include才能访问标准库。

此外,还有托管独立实施。以下是标准所说的内容:

  

定义了两种实现:托管实现独立实现。对于托管实现,此国际标准定义了可用库集。独立实现是指在没有操作系统优势的情况下执行的实现,并且具有包含某些语言支持库(17.6.1.3)的实现定义库集。

由于声明中说“每个 C ++实现”,并且独立实现不包含整个C ++标准库,因此语句为 TRUE

答案 1 :(得分:3)

陈述是真的(你的家庭作业导师是错的)。该标准在托管和独立实现之间区分17.4.1.3。只有托管的实现才能实现C ++标准库。独立实现只需要具有以下标题:

18.1 Types <cstddef>
18.2 Implementation properties <limits>
18.3 Start and termination <cstdlib>
18.4 Dynamic memory management <new>
18.5 Type identification <typeinfo>
18.6 Exception handling <exception>
18.7 Other runtime support <cstdarg>

答案 2 :(得分:1)

如果C ++实现声称是C ++标准(ISO / IEC 14882)的一致性实现,则需要包含编译器和标准C ++库的实现。即使是符合标准的实现,标准库也不一定非常完整:独立实现和托管实现之间存在差异。虽然前者只需要非常基本的支持,但后者要求提供整个实现(我认为这是这种方式,但我一直对这些术语感到困惑;它可能是另一种方式)。

也就是说,有各种编译器不提供超过一个非常基本的库,他们提供的基本库包含编译器必须执行的操作或运行时绝对需要运行的东西。但是,它们并不声称是符合要求的实现。您需要将它们与库结合使用,但是您可以购买(或下载一些库,其中一些是免费的,但免费的库似乎只适用于几个特定的​​编译器)。