gpt4 book ai didi

c++ - C++11 及更高版本中的替代 STL 实现

转载 作者:IT老高 更新时间:2023-10-28 21:44:39 24 4
gpt4 key购买 nike

随着时间的推移,出现了 STL* 的各种替代实现 - 例如 STLPort。某些大公司也将自己的 STL 内部端口用于各种目的。

使用 C++03,可以仅使用可移植的 C++ 语言功能编写 STL 的端口,这意味着任何符合标准的编译器都应该能够编译它。

但是对于 C++11,是不是有些特性需要编译器支持?

例如,我看不出如何仅使用 C++ 语言功能来实现 std::is_standard_layout。我认为 std::is_base_of 可以根据 std::is_convertible 来实现,使用基指针和派生指针。但我无法想象如何实现 std::is_standard_layout 。可能还有其他我没有想到的功能。

那么,我在这里说得对吗?使用 C++ 语言特性是否可以在 C++11 中编写标准库的完整端口?

*我知道 STL 和“C++ 标准库”不能严格互换,但显然在这种情况下我指的是 C++ 标准库。

最佳答案

您无法在任何版本的 C++ 中编写完全可移植的标准 C++ 库实现!首先,一些标准 C++ 库组件清楚地抽象了系统细节。例如,文件流抽象了对文件访问的访问。是的,您可以使用 FILE*在幕后,但我认为标准 C 库是标准 C++ 库的一部分,并且可移植实现也需要包含该部分。此外,某些类型实际上取决于编译器,例如,因为它们之间存在语言级别的交互。例如 std::bad_cast作为 dynamic_cast<...>() 的结果抛出.此外,一些标准的 C++ 库组件需要利用关于内存布局的知识和 reinterpret_cast<...>()做正确的事。在其他情况下,标准库指定了无法确定可移植的值,例如 std::numeric_limits<T> 的某些字段.

标准 C++ 库的总体理念是,它涵盖了常见需求并实现了某些无法以可移植和高效方式实现的功能。您引用的类型特征只是编译器需要提供一些帮助的一些示例。尽管我试图就编译器如何暴露类型特征达成一些共识,但编译器作者坚持认为他们需要自由选择,标准 C++ 库应该只为暴露特征的方式提供一个通用接口(interface).

关于c++ - C++11 及更高版本中的替代 STL 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18923293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com