【发布时间】:2019-02-28 20:01:05
【问题描述】:
我正在编写一些使用 std::string 的 c++ 代码。
我想看看代码是怎么写的,所以我进入了源代码。 (ctrl + 左键单击)。
我注意到,到处都有宏。
代码甚至以:
_STD_END
// Corresponds to: #define _STD_END }
我明白为什么宏很有用,并且我将它们用于我自己的 Log.hpp 文件,但我不明白为什么有人会使用诸如 _STD_END 之类的宏而不是仅仅编写 }。
澄清一下,我的问题是为什么 std::string 的作者 P.J. Plauger 决定以这种方式使用宏,如果我也应该这样做?
【问题讨论】:
-
标准库的编写不是考虑到可读性。库实现者还必须遵守他们自己的一套规则,以避免与用户代码发生任何冲突,并有权根据他们正在工作的平台或编译器授予他们自己的权限,而您当然不想依赖这些平台或编译器。通过阅读标准库实现来学习并不是学习 c++ 的一种非常可靠的方法。
-
@Xerxes -- 如果我也应该这样做? -- 快速回答 -- 不。
-
说得很清楚,如果你想了解标准库是做什么的,你应该read the documentation。作为一个普通的程序员,任何比它告诉你的更详细的事情都是你不应该担心的。除了基本的好奇心之外,您不需要深入研究标准库的实现,除非您确信该实现存在错误。
-
虽然标准库不应该用作一种有趣的休闲阅读体验,但您可以学习一些非常简洁的、特定于平台的技巧,您可以把它们放在后口袋里,直到真正(更多真的在这里)需要它们。归根结底,更多的知识总是比更少的好。只是不要滥用这些知识。
-
查看该头文件的版权日期:1992。原始 STL was not in a namespace。通过更改少量
#defines,宏允许在“全局命名空间模式”或“std命名空间模式”中使用相同的头文件。