如何解决预处理程序宏和std :: source_location之间的区别 所以,我的问题是...
有一些预定义的预处理器宏(在C和C ++标准中指定),例如__line__
和__file__
,它们在预处理期间分别由行号和文件名替换。在C ++ 20中,引入了一个新的类std::source_location
,它或多或少地完成相同的工作。
所以,我的问题是...
- 它们之间有什么区别?
- 它们的优缺点是什么?
- 出于哪个原因我应该使用哪个?
解决方法
预处理器宏位于类型系统之外。预处理程序宏替换发生在该语言的其余部分之外。有关使用预处理器的缺点的全面讨论,请参见this answer和this answer。
另一方面, std::source_location
的行为与任何其他C ++结构一样。它具有简单的值字段,这些字段的类型和行为与语言中的其他任何值一样。
此外,在功能上,这两种机制是等效的。除了source_location
中的column field(在预处理器中没有等效功能)之外,其他任何人都无法做到。只是新方法可以更好地实现其目标。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。