std:: source_location
|
定义于头文件
<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:: is_nothrow_move_constructible_v < std :: source_location > ,
- std:: is_nothrow_move_assignable_v < std :: source_location > ,以及
- std:: is_nothrow_swappable_v < std :: source_location > 。
设计意图是让
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!
参见
|
更改源代码行号及可选的文件名
(预处理指令) |
|
|
(C++23)
|
堆栈跟踪中求值过程的表示
(类) |