2

是否可以仅使用 C++ 编写完整的 C++ 标准库(当然包括 STL,但自包含,仅内部依赖项)?我会想象容器和<cstdlib>功能在chars、bitshift、for 循环和其他字节奇特的东西方面是可行的,但是像异常之类的东西,如果没有依赖,我可能会std::cout觉得std::cin很难。假设有一组可用的 OS 功能,它们完全在汇编中实现(以避免任何 C 污染)。

我假设编译器了解从类和虚函数到模板和函数重载的所有内容,这些都是语言级别的东西,恕我直言,在库中没有位置。

如果以前有人问过这个问题或者是一个非常愚蠢的问题,请原谅我。我不是想在这里开始一场 C<->C++ 战争,只是想弄清楚实现标准库等野兽的局限性......

谢谢!

4

4 回答 4

6

由于几乎所有用 C 编写的东西都可以在 C++ 中相当容易地重写,因此您问是否需要汇编代码,答案通常是否定的。

除非我们谈论嵌入式编程,否则操作系统具有通过系统调用提供的所有必要文件和 I/O 功能,通常(现在)以 C 格式。库需要调用它们,可能是通过extern "C"{ ... }声明。操作系统函数不被视为 C++ 库的一部分,并且通常与 C++ 标准中定义的任何内容都不完全匹配。

要实现 C++ 标准库,您需要熟悉语言本身,了解您将使用的操作系统调用,并拥有您将使用的算法。那时,编写软件是一件相对简单的事情。

于 2010-12-06T15:03:04.843 回答
3

首先,它是 C、C++ 还是 D 都没有关系。任何可编译的编程语言最后都会为您(大部分)提供相同的汇编目标文件。

第二件事,STL 是用 C++ 编写的,你不能用 C 或任何其他语言编写 C++ 库(好吧,你可以,但我假设,我们正在讨论合理的解决方案)。您不能在 C 中实现 STL 容器,因为它强烈使用模板。

GCC 现在在 asm 中为异常生成非常好的输出。我建议阅读 C++ ABI(如果您对此感兴趣)。

C++ 编译器现在非常了解所有 C++ 特定功能。由于真正先进的代码分析和优化,它能够生成快速的可执行文件(见第一段)。

我希望我至少部分回答了你的问题。

于 2010-12-06T15:08:14.053 回答
1

STL 非常依赖#includeed 头文件。那些几乎必须是C++。

理论上,任何不在这些头文件中的东西都可以用 C、Ada、Assembly 或您选择的其他系统编程语言来实现。但是,如果您至少不制作顶层 C++,您可能必须维护两个接口。

于 2010-12-06T15:03:54.560 回答
1

唯一需要汇编的 C++ 部分是异常处理。我想如果存在处理必要的寄存器和堆栈管理的库,它可能在 C++ 中是可行的。

当然,这些库将包括汇编。没有其他方法可以直接进行注册管理。

于 2010-12-06T17:00:13.420 回答