# std::source_location::current

< 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)    // 成员的值指代调用函数的位置
        {}
        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` (公开成员函数)
current [静态] (C++23) | 获得当前栈踪或其给定部分 (`std::basic_stacktrace<Allocator>` 的公开静态成员函数)