C ++标准库是 C ++语言的一部分吗? (注意“语言”,而不是“标准”;当然,两者都是标准的一部分。)
如果是这样,为什么?如果没有,为什么不呢?
这个问题的答案可能因C ++ 98,C ++ 03和C ++ 0x而异。
这不是主观的,因为它可以从相关标准文件中的措辞/要求中推断出来。
答案 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条所述的形式。
[/编辑]