【问题标题】:Does the C++ Spec treat the std library special?C++ 规范是否特别对待 std 库?
【发布时间】:2020-05-27 20:50:39
【问题描述】:

在我的印象中,std 库对于 C++ 编译器来说并不特别,只是因为每个供应商都提供了它的实现,否则它只是用 C++ 编写的代码,可以在 C++ 中使用,就像任何其他用 C++ 编写的代码一样。

我见过一些似乎不同意这一点的地方,例如用户定义的文字后缀如何必须以下划线开头,因为“不以下划线开头的后缀是为标准提供的文字运算符保留的图书馆”。 https://en.cppreference.com/w/cpp/language/user_literal

规范对 std 库的规则是否真的与要编译的其他 C++ 代码不同? C++ 编译器是否经过硬编码以识别标准库中的代码并“做一些不同的事情”?

这真的让我对整个系统如何协同工作的内部形象感到不安......

【问题讨论】:

  • 我还没有看到不是特定于 C++ 编译器的 C++ 库。作为规范的 C++ 标准不要求 C++ 库有特殊规则,除了 C++ 库应该提供的最低限度。
  • 一个有趣的偏差是库实现者几乎总是在编写库以与特定编译器打包,并且知道该编译器将如何解释某些未定义的行为。你可以期望图书馆做你不应该做的事情,因为他们知道他们可以侥幸逃脱(并且可能有充分的理由这样做)。

标签: c++


【解决方案1】:

该库大部分与您描述的一样,但也有例外。

您提到的文字问题may be a defect。然而,即使是这样,实现中的名称冲突在实践中是完全可以避免的,因为它是一组人编写的。

此外,some standard library features actually cannot be implemented without compiler support

所以这有点好坏参半。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2013-05-11
    相关资源
    最近更新 更多