我正在编写一些使用std :: string的c ++代码。
我想看看代码是怎么写的,所以我进入了源代码。(Ctrl +左键单击)。
我注意到,到处都有宏。
该代码甚至以:
_STD_END
// Corresponds to: #define _STD_END }
Run Code Online (Sandbox Code Playgroud)
我知道了为什么宏有用,并且将它们用于我自己的Log.hpp文件,但是我不明白为什么有人会使用诸如之类的宏_STD_END而不是仅仅编写宏}。
为了明确起见,我的问题是为什么他的std :: string作者PJ Plauger决定以这种方式使用宏,如果我也应该这样做?
Pet*_*ker 27
这就是Microsoft许可的Dinkumware库(尽管他们最近已经接管了其版本的完整维护)。在_STD_BEGIN和_STD_END宏用于自定义std命名空间。有些编译器不(不是?)不支持名称空间。对于那些编译器,宏扩展为空。一些编译器需要某种间接方式,并且这些宏扩展为指令,这些指令将代码放入特定于实现者的名称空间(即,名称下划线后跟大写字母的名称空间),使用可能会或可能不会对其进行补充。 -directive将该名称空间的内容拖入std。在许多情况下,它们分别扩展为明显的,普通的namespace std {和}。
简而言之,它们是关于多平台库实现的可配置性。
我在Dinkumware工作了很多年,因此我拥有第一手知识。