命名空间
变体
操作

std::source_location

来自 cppreference.cn
< cpp‎ | utility
 
 
 
 
定义于头文件 <source_location>
struct source_location;
(自 C++20 起)

std::source_location 类表示关于源代码的特定信息,例如文件名、行号和函数名。 以前,希望获取关于调用点信息的函数(用于日志记录、测试或调试目的)必须使用宏,以便像 __LINE____FILE__ 这样的预定义宏在调用者的上下文中展开。 std::source_location 类提供了一个更好的替代方案。

std::source_location 满足 DefaultConstructibleCopyConstructibleCopyAssignableDestructibleSwappable 要求。

此外,以下条件为 true

std::source_location 旨在具有小尺寸并且可以高效复制。

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

目录

[编辑] 成员函数

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

[编辑] 注释

特性测试 Std 特性
__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); // line 20
}
 
int main(int, char*[])
{
    log("Hello world!"); // line 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!

[编辑] 另请参阅

更改源代码的行号,并可选择更改当前文件名
(预处理指令)[编辑]
堆栈跟踪中求值的表示
(类) [编辑]