命名空间
变体
操作

std::source_location

来自 cppreference.com
< cpp‎ | utility
 
 
实用程序库
语言支持
类型支持 (基本类型,RTTI)
库特性测试宏 (C++20)
动态内存管理
程序实用程序
协程支持 (C++20)
可变参数函数
source_location
(C++20)
调试支持
(C++26)
三方比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用程序
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (在 C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
 
在头文件 <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 的复制/移动构造函数和复制/移动赋值运算符是平凡的和/或 constexpr 是未指定的。

内容

[编辑] 成员函数

创建
使用实现定义的值构造一个新的 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!

[编辑] 另请参阅

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