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

Lig*_*ica 10 c++ language-lawyer c++11

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

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

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

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

pax*_*blo 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++,并且标准需要适当的语言和库.


Jam*_*nze 6

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

在其他地方,标准确实区分了库和其他语言.然而,形式上唯一真正的区别在于,库是根据语言的非库部分来定义的; 即图书馆定义了类和模板.该标准还清楚地表明,库不需要以头文件和部件的形式作为库存在,或者所有库都可以内置到编译器中(尽管我不知道任何实际编译的编译器)所以).


Bo *_*son 5

至少他们不是分开的!

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

例如构造

std::vector<int> v = {1, 2, 3, 4, 5};
Run Code Online (Sandbox Code Playgroud)

使用库中的std :: initializer_list.

新的表达方式

char* p = new char[42];
Run Code Online (Sandbox Code Playgroud)

使用<new>中的operator new.

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

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

库中的某些部分,如type_traits和atomic,不能仅作为库实现,因此它们绝对不是分开的.