C++库 - <source_location>



C++20中的<source_location>头文件旨在捕获运行时源代码信息。它提供关于代码位置的详细信息,例如文件名和行号,无需显式传递这些信息。这在调试、日志记录和错误处理等场景中特别有用。

在引入<source_location>之前,文件名或行号是使用像`__FILE__`和`__LINE__`这样的宏手动传递到日志或错误处理程序中的。

包含<source_location>头文件

要在C++程序中包含<source_location>头文件,可以使用以下语法。

#include <source_location>

<source_location>头文件的函数

以下是<source_location>头文件中所有函数的列表。

序号 函数及描述
1 current

它构造一个对应于调用站点位置的新source_location。

2 line

它返回此对象表示的行号。

3 column

它返回此对象表示的列号。

4 file_name

它返回此对象表示的文件名。

5 function_name

它返回此对象表示的函数名。

获取函数名

在下面的示例中,我们将调用source_location::current()并检索函数名。

#include <iostream>
#include <source_location>
void x(const std::source_location & loc = std::source_location::current()) {
   std::cout << "Result : " << loc.function_name() << '\n';
}
void y() {
   x();
}
int main() {
   y();
}

输出

以上代码的输出如下:

Result : void y()

组合多个源位置

考虑下面的示例,我们将把列号和行号组合到一个日志消息中。

#include <iostream>
#include <source_location>
void a(const std::string & message,
   const std::source_location & location = std::source_location::current()) {
   std::cout << "Message: " << message << "\n";
   std::cout << "Line: " << location.line() << "\n";
   std::cout << "Column: " << location.column() << "\n";
}
int main() {
   a("WELCOME");
   return 0;
}

输出

以下是以上代码的输出:

Message: WELCOME
Line: 10
Column: 6
广告