C++中的标准库实现有什么区别?

Fir*_*ger 10 c++ c++-standard-library

正如我们德国人所说的那样,我可能"走在木路上".(谚语走错路)

C++定义了一个标准库,这个标准得到在C++ 98,C++ 11,C + 17(纠正我,如果我错了)经常更新.我假设每个编译器或操作系统都定义了自己的标准库实现.

因此除了明显的操作系统特定部分之外,标准库的这些实现之间有什么不同(如果有的话)?

是否存在针对同一操作系统的实施的"变体"?如果是这样,我什么时候才想打扰使用哪种实现?

Rak*_*111 6

基本上每个容器的任何定义都是特定于实现的.标准仅规定了声明和预期的行为,副作用和条件.

§21.4.2中的示例:

basic_string(const basic_string& str,
               size_type pos, size_type n = npos,
               const Allocator& a = Allocator()); 
Run Code Online (Sandbox Code Playgroud)

要求:pos <= str.size()

抛出:out_of_range如果pos > str.size().

E ff ects:构造一个类的对象,basic_string并将rlen初始字符串值的有效长度确定为较小的n和str.size() - pos,如表65所示.

正如您所看到的,标准还说明了构造函数的std::basic_string作用,但没有说明它应该如何实现.它还定义了应该使用的签名.实际的实现因编译器供应商而异 - gcc并且clang具有不同的实现,尽管它们用于同一平台,但构造函数执行相同的操作.

你不需要担心实现(从技术上来说,你做了 - 一些实现并没有实现所有的东西,但这很少见),因为它们都应该(应该)完成标准中记录的所有内容.

  • 如果考虑性能,那么细节实施细节会非常重要.如果你只考虑功能,那就不那么了 (2认同)