C ++标准库是C ++语言的一部分吗?

时间:2011-03-28 14:35:11

标签: c++ c++11 language-lawyer

C ++标准库 C ++语言的一部分吗? (注意“语言”,而不是“标准”;当然,两者都是标准的一部分。)

如果是这样,为什么?如果没有,为什么不呢?

这个问题的答案可能因C ++ 98,C ++ 03和C ++ 0x而异。

这不是主观的,因为它可以从相关标准文件中的措辞/要求中推断出来。

4 个答案:

答案 0 :(得分:12)

是的,在当前标准(C ++ 03)和即将推出的新标准(C ++ 0x,它最终到达最终草案阶段所以它现在不应该太长),库函数是规范的一部分(至少对于托管实现)。即使是独立式实现也需要一个标准库,尽管它更简单。

在C ++ 03中,第17章到第27章涉及标准库。在C ++ 0x中(至少是我最方便的n3225草案),第17章到第30章是相关的。

您可以看到C ++ 03的标准和当前的C ++ 0x草案来确认这一点。标准包含适当的语言和标准库。

从C ++ 03(与本节的C ++ 0x几乎相同):

  

1.1范围[intro.scope]

  1本国际标准规定了C ++编程语言实现的要求。第一个这样的要求是它们实现了语言,所以这个国际标准也定义了C ++。第一项要求的其他要求和放宽应出现在本国际标准的各个地方。

  2 C ++是一种基于C编程语言的通用编程语言,如ISO / IEC 9899:1990编程语言 - C(1.2)中所述。除了C提供的功能之外,C ++还提供其他数据类型,类,模板,异常,命名空间,内联函数,运算符重载,函数名称重载,引用,免费商店管理运算符和其他库设施。

因此,您可以从中看到标准作者确实区分了正确的语言和库,但是对于标准的实现者和语言的用户,语言是整体事情。除非你遵循标准,否则你不能称自己为C ++,标准要求使用适当的语言和库。

答案 1 :(得分:6)

我见过的所有标准版本中的第一个单词 是“本国际标准规定的要求 C ++编程语言的实现。“换句话说, 标准中指定的任何内容都是“语言”的一部分。

在其他地方,标准确实区分了库和 其余的语言。然而,形式上,唯一真正的区别 是库是根据非库部分定义的 语言;即库定义类和模板。标准 还明确表示图书馆不需要作为图书馆出现, 以头文件的形式,部分或全部可以内置 编译器(虽然我不知道任何实际编译的编译器 左右)。

答案 2 :(得分:5)

至少他们不是分开的!

在一些地方,标准的语言条款使用了库子句中定义的类型和接口。如果它们是独立的实体,它怎么能这样做呢?

例如构造

std::vector<int> v = {1, 2, 3, 4, 5};

使用库中的std :: initializer_list。

新表达

char* p = new char[42];

使用&lt; new&gt;中的operator new。

运算符typeid返回std :: type_info,一个库类型。

核心功能dynamic_cast可能会抛出一个在库中定义的异常。

库中的某些部分,如type_traits和atomic,不能仅仅作为库来实现,所以它们绝对不是分开的。

答案 3 :(得分:2)

是 - 您可以找到C ++标准中指定的库。有时,您会遇到术语“核心语言功能”,以区别于库功能,但它们都是语言的一部分。

[编辑]实际上,标准本身似乎区分了语言和库。从最新的C ++ 0x草案(1.5)

  

第2至16条描述了C ++编程语言。该描述包括详细的句法   1.6中描述的形式的规格。为方便起见,附件A重复了所有这些语法规范。   2条款18至30和附录D(库条款)描述了标准C ++库。那个描述   包括构成的模板,类,函数,常量和宏的详细描述   图书馆,采用第17条所述的形式。

[/编辑]