std::source_location::current

来自cppreference.com
 
 
 
 
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;
 
    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 main
12 src_rec
15 src_rec
34 main
34 main
36 main
25 src_make

[编辑] 参阅

构造拥有实现定义的值的新 source_location
(公开成员函数) [编辑]