首页 > 解决方案 > std::string 源代码中宏的使用

问题描述

我正在编写一些使用 std::string 的 c++ 代码。
我想看看代码是怎么写的,所以我进入了源代码。(Ctrl + 左键单击)。
我注意到,到处都有宏。
代码甚至以:

_STD_END
// Corresponds to: #define _STD_END }

我明白为什么宏很有用,我将它们用于我自己的 Log.hpp 文件,但我不明白为什么有人会使用宏,_STD_END而不是仅仅编写}.

澄清一下,我的问题是为什么 std::string 的作者 PJ Plauger 决定以这种方式使用宏,如果我也应该这样做?

标签: c++stringstd

解决方案


那是微软许可的 Dinkumware 库(尽管他们最近接管了对其版本的全面维护)。和_STD_BEGIN_STD_END用于自定义std命名空间。一些编译器不(没有?)支持命名空间;对于那些编译器,宏扩展是空的。一些编译器需要一些间接性,这些宏扩展为指令,将代码放入特定于实现者的命名空间(即,名称以下划线后跟大写字母开头的命名空间),它可能会或可能不会由 using 补充-directive 将该命名空间的内容拉入std. 在许多情况下,它们分别扩展为明显的、普通的namespace std {}

简而言之,它们是关于多平台库实现的可配置性。

我在 Dinkumware 工作了好几年,所以我有第一手的知识。


推荐阅读