Namespaces
Variants

std:: source_location

From cppreference.net
Utilities library
定义于头文件 <source_location>
struct source_location ;
(C++20 起)

std::source_location 类用于表示源代码的特定信息,例如文件名、行号和函数名。以往需要获取调用处这类信息(用于日志记录、测试或调试目的)的函数必须使用宏,以便像 __LINE__ __FILE__ 这样的 预定义宏 在调用方上下文中展开。 std::source_location 类为此提供了更优的替代方案。

std::source_location 满足 DefaultConstructible CopyConstructible CopyAssignable Destructible 以及 Swappable 要求。

此外,以下条件为 true

设计意图是让 std::source_location 保持较小尺寸并能被高效复制。

未指定 std::source_location 的复制/移动构造函数及复制/移动赋值运算符是否为平凡和/或常量表达式。

目录

成员函数

创建
构造具有实现定义值的 source_location 对象
(公开成员函数)
[static]
构造对应于调用点位置的新 source_location 对象
(公开静态成员函数)
字段访问
返回此对象表示的行号
(公开成员函数)
返回此对象表示的列号
(公开成员函数)
返回此对象表示的文件名
(公开成员函数)
返回此对象表示的函数名称(如果存在)
(公开成员函数)

注释

功能测试 标准 功能
__cpp_lib_source_location 201907L (C++20) 源代码信息捕获 ( std::source_location )

示例

#include <iostream>
#include <source_location>
#include <string_view>
void log(const std::string_view message,
         const std::source_location location =
               std::source_location::current())
{
    std::clog << "file: "
              << location.file_name() << '('
              << location.line() << ':'
              << location.column() << ") `"
              << location.function_name() << "`: "
              << message << '\n';
}
template<typename T>
void fun(T x)
{
    log(x); // 第20行
}
int main(int, char*[])
{
    log("Hello world!"); // 第25行
    fun("Hello C++20!");
}

可能的输出:

file: main.cpp(25:8) `int main(int, char**)`: Hello world!
file: main.cpp(20:8) `void fun(T) [with T = const char*]`: Hello C++20!

参见

更改源代码行号及可选的文件名
(预处理指令)
堆栈跟踪中求值过程的表示
(类)