c++ - std::string 源代码中宏的使用
问题描述
我正在编写一些使用 std::string 的 c++ 代码。
我想看看代码是怎么写的,所以我进入了源代码。(Ctrl + 左键单击)。
我注意到,到处都有宏。
代码甚至以:
_STD_END
// Corresponds to: #define _STD_END }
我明白为什么宏很有用,我将它们用于我自己的 Log.hpp 文件,但我不明白为什么有人会使用宏,_STD_END
而不是仅仅编写}
.
澄清一下,我的问题是为什么 std::string 的作者 PJ Plauger 决定以这种方式使用宏,如果我也应该这样做?
解决方案
那是微软许可的 Dinkumware 库(尽管他们最近接管了对其版本的全面维护)。和_STD_BEGIN
宏_STD_END
用于自定义std
命名空间。一些编译器不(没有?)支持命名空间;对于那些编译器,宏扩展是空的。一些编译器需要一些间接性,这些宏扩展为指令,将代码放入特定于实现者的命名空间(即,名称以下划线后跟大写字母开头的命名空间),它可能会或可能不会由 using 补充-directive 将该命名空间的内容拉入std
. 在许多情况下,它们分别扩展为明显的、普通的namespace std {
和}
。
简而言之,它们是关于多平台库实现的可配置性。
我在 Dinkumware 工作了好几年,所以我有第一手的知识。
推荐阅读
- python - 即使在 django 和 discord.py 中使用 sync_to_async 后,也会出现 SynchronousOnlyOperation 错误
- html - 范围到邮件正文 excel VBA 但未显示完整范围
- mysql - Kubernetes 中的 MySQL 路由器作为服务
- ios - SwiftUI - 计时器不会停在 0
- python - 从其他数据框替换数据框列中dict列表中的值
- nullpointerexception - 非 GUI 模式下 jmeter 中的 java.lang.nullpointer 异常
- angular - 在 Angular 表单中按下回车后调用函数(按钮)
- reactjs - 无法在反应 js 中正确使用 Refs,无法读取未定义的属性
- intellij-idea - localhost:8080 不工作,但 tomcat 服务器在 IntelliJ 中工作
- c - 使用 gdb python api,如何在调试会话期间获取 ac 变量的值