Namespaces
Variants

std::source_location:: current

From cppreference.net
Utilities library
static consteval source_location current ( ) noexcept ;
(自 C++20 起)

构造一个新的 source_location 对象,该对象对应于调用点的位置。

目录

参数

(无)

返回值

如果直接调用 current() (通过显式命名 current() 的函数调用),它将返回一个 source_location 对象,该对象包含表示调用位置的实现定义值。这些值应受到 #line 预处理器指令 的影响,其影响方式与预定义宏 __LINE__ __FILE__ 相同。

如果在 默认成员初始化器 中使用 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)    // 成员的值引用调用函数的位置
    {}
    src_rec(int i) : // 成员的值引用此位置
        dummy(i)
    {}
    src_rec(double)  // 成员的值引用此位置
    {}
};
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 对象
(公开成员函数)
[static]
获取当前调用栈或其指定部分
( std::basic_stacktrace<Allocator> 的公开静态成员函数)