【问题标题】:Must a C++ Standard Library be implemented in C++?C++ 标准库必须用 C++ 实现吗?
【发布时间】:2012-02-28 03:08:53
【问题描述】:
  1. 必须在 C++ 中实现符合标准的 C++ 标准库实现吗?
  2. 如果不是,是否允许执行在纯 C++ 和标准库以及某些实现定义的行为中无法实现的神奇事情?

  • 我知道存在依赖于扩展的并行实现(至少在 C++11 之前),但它们真的符合吗?
  • 我在标准中找不到任何要求,但可能我的标准符今天很弱

【问题讨论】:

  • 我想起了关于国情咨文的一句话:“如果总统购买国会订阅《华尔街日报》,他就履行了他的宪法义务!”
  • “好像”规则允许实现选择它喜欢的任何实现。

标签: c++ standards-compliance c++-standard-library


【解决方案1】:

完全不用,只需要接口是C++即可。

【讨论】:

  • 这是什么意思? #include <some-std-header> 不必包含文件:它可能只是通知编译器某些定义可以在翻译单元中使用,即我认为接口也不需要在 C++ 中。这在某种程度上取决于您对interface 的看法,不过...
  • 我猜是这样(但猜测不应该是问题的一部分:)),但我更多的是在寻找参考资料或引文。
  • @DietmarKühl 我相信视觉时代实际上使用了这种技术。
【解决方案2】:

对于如何实现标准 C++ 库(或标准 C 库)完全没有要求。所有库需要实现的是实现文档化和指定的接口。如何做到这一点完全取决于实施。部分标准库通常由编译器以某种神奇的方式实现,而在 C++2011 中有几个接口实际上无法使用标准 C++2011 语言工具实现!这主要适用于 <type_traits> 中的某些特征,但还有其他情况。

仅供参考:C++ 是如何实现的,以及符合标准的真正含义是非常模糊的。相关条款是 1.4 [intro.compliance]。然而,它仅仅谈到了正在发出的诊断信息以及程序必须做什么,以及对资源限制的限制。

【讨论】:

  • +1:作为一个温和的模板编写者,我真的很好奇那会是什么类型特征。
  • 您不需要任何最近添加的内容即可找到使用标准语言工具无法实现的内容。语言本身没有 IO 的概念,所以filebuf et al.需要更多的东西(Posix,无论如何——但这不是标准的 C++)。事实上,有些东西是有用的,即使是对一个小社区,但不能用标准语言结构来实现,这通常是把它添加到库中的动机。 (在 C 中,这是为 offsetof 给出的参数。)
  • @phresnel:我没有现成的完整列表,列出没有编译器支持就无法实现的东西。但是,is_trivially_default_constructible 之类的东西需要测试有关默认构造函数的实际声明方式或合成方式的信息。一些编译器实现了各种类型的特征,但它们通常实现的不是绝对必要的,因为编译器可以更有效地告诉某些特征,而不是检查一些人为的实例化。
  • @DietmarKühl 怎么样?如何在不超出 C++ 语言的情况下将操作系统中的字节转换为 C++ 对象(char 或其他数组)(据我所知,它甚至不承认程序外字节的存在)?
  • @JamesKanze:我同意使用例如POSIX 函数超出了 C++ 标准的范围,如果不使用相应的功能(无论是 C 库、陷阱还是其他),您将无法实现例如文件流。显然,我同意标准,包括它的库,如果没有这些,就不能在标准 C++ 中实现。
【解决方案3】:

没有。

实际上,标准甚至规定#include <map>(例如)可以简单地导入预存储的 AST 而根本不引用文件。

【讨论】:

  • 让我接受这个。 Dietmars 的回答没有你的那么具体。
猜你喜欢
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 2011-05-10
  • 2015-07-18
  • 1970-01-01
  • 2017-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多