【发布时间】:2020-12-07 14:44:36
【问题描述】:
有一些预定义的预处理器宏(在 C 和 C++ 标准中指定)如 __line__ 和 __file__ 在预处理期间分别替换为行号和文件名。在 C++20 中,引入了一个新类 std::source_location,它或多或少做同样的事情。
所以,我的问题是……
- 它们之间有什么区别?
- 它们的优缺点是什么?
- 出于何种原因我应该使用哪一个?
【问题讨论】:
-
如cpp reference 中所述,“旨在使source_location 具有较小的大小并且可以有效地复制。
-
一个区别是
std::source_location对象在很多事情上不再需要“丑陋”的宏,您可以使用简单的函数(如this example 所示)。