std::source_location::current
来自 cppreference.com
< cpp | utility | source location
static consteval source_location current() noexcept; |
(自 C++20) | |
构造一个新的 source_location
对象,对应于调用站点的地址。
内容 |
[编辑] 参数
(无)
[编辑] 返回值
如果 current()
被直接调用(通过一个命名 current()
的函数调用),它将返回一个 source_location
对象,其中包含实现定义的值,用于表示调用的地址。这些值应该与预定义宏 __LINE__ 和 __FILE__ 一样,受 #line
预处理器指令 的影响。
如果 current()
在 默认成员初始化器 中使用,返回值将对应于初始化数据成员的构造函数定义或 聚合初始化 的地址。
如果 current()
在默认参数中使用,返回值将对应于在调用站点调用 current()
的地址。
如果 current()
以任何其他方式调用,返回值是不确定的。
[编辑] 注释
std::source_location::current
通常需要编译器的内置实现。
[编辑] 示例
运行此代码
#include <source_location> #include <iostream> struct src_rec { std::source_location srcl = std::source_location::current(); int dummy = 0; src_rec(std::source_location loc = std::source_location::current()) : srcl(loc) // values of member refer to the location of the calling function {} src_rec(int i) : // values of member refer to this location dummy(i) {} src_rec(double) // values of member refer to this location {} }; std::source_location src_clone(std::source_location a = std::source_location::current()) { return a; } std::source_location src_make() { std::source_location b = std::source_location::current(); return b; } int main() { src_rec srec0; src_rec srec1(0); src_rec srec2(0.0); auto s0 = std::source_location::current(); auto s1 = src_clone(s0); auto s2 = src_clone(); auto s3 = src_make(); std::cout << srec0.srcl.line() << ' ' << srec0.srcl.function_name() << '\n' << srec1.srcl.line() << ' ' << srec1.srcl.function_name() << '\n' << srec2.srcl.line() << ' ' << srec2.srcl.function_name() << '\n' << s0.line() << ' ' << s0.function_name() << '\n' << s1.line() << ' ' << s1.function_name() << '\n' << s2.line() << ' ' << s2.function_name() << '\n' << s3.line() << ' ' << s3.function_name() << '\n'; }
可能的输出
31 int main() 12 src_rec::src_rec(int) 15 src_rec::src_rec(double) 34 int main() 34 int main() 36 int main() 25 std::source_location src_make()
[编辑] 另请参阅
使用实现定义的值构造一个新的 source_location 。(公有成员函数) | |
[静态] |
获取当前的堆栈跟踪或其给定部分。 ( std::basic_stacktrace<Allocator> 的公有静态成员函数) |