我正在编写一些使用std::string的c++代码。
我想看看代码是如何编写的,所以我进入了源代码。(ctrl +左键单击)。
我注意到,到处都是宏。
代码甚至以:
_STD_END
// Corresponds to: #define _STD_END }
我明白为什么宏很有用,并且我将它们用于我自己的Log.hpp文件,但是我不明白为什么每个人都要使用像_STD_END
这样的宏,而不是仅仅编写}
。
为了澄清,我的问题是为什么std::string的作者P.J. Plauger决定以这种方式使用宏,如果我也应该这样做呢?
发布于 2019-03-01 06:48:50
这就是微软许可的Dinkumware库(尽管他们最近接管了他们版本的全部维护工作)。_STD_BEGIN
和_STD_END
宏用于自定义std
命名空间。有些编译器不支持(不是吗?)支持命名空间;对于这些编译器,宏扩展为空。有些编译器需要一些间接性,这些宏扩展成指令,将代码放入特定于实现者的名称空间(即名称以下划线开头,后面跟着大写字母的名称空间),该名称空间可能由using-指令补充,也可能不由using-指令补充,以将该名称空间的内容拉入std
。在许多情况下,它们分别扩展为显而易见的、普通的namespace std {
和}
。
简而言之,它们是关于多平台库实现的可配置性。
我在Dinkumware工作了好几年,所以我有第一手的知识。
https://stackoverflow.com/questions/54933371
复制相似问题