为什么STL实现如此难以理解?如何在这里改进C++?

Łuk*_*Lew 32 c++ stl readability c++11

比如为什么在STL实现大多数成员_M____前缀?为什么有那么多样板代码?

C++缺少哪些功能可以使make vector(例如)实现更清晰,更简洁?

rob*_*.14 37

实现使用以下划线开头的名称,后跟大写字母或两个下划线,以避免与用户定义的宏冲突.这些名称在C++中保留.例如,可以定义一个被调用的宏Type然后#include <vector>.如果vector实现用作Type模板参数名称,它将会中断.然而,一个不允许定义宏叫_Type(或__type,type__等等).因此,vector可以安全地使用这样的名称.

  • 因此,通过使宏系统更强大,可以改进C++ :) (3认同)
  • 宏的名称空间? (2认同)

Ash*_*ain 6

许多STL实现还包括检查调试版本,例如在比较它们时验证两个迭代器来自同一容器,并观察迭代器是否超出范围.这涉及相当复杂的代码来跟踪容器和创建的每个迭代器的有效性,但对于查找错误非常有用.这段代码也与#ifdefs的标准版本代码交织在一起 - 即使在STL算法中也是如此.所以它永远不会像他们最基本的操作一样清晰.像这样的站点显示了STL算法的最基本功能,说明它们的功能"等同于"它们显示的代码.但是你不会在头文件中看到它.