命名空间
变体
操作

std::source_location::current

来自 cppreference.com
 
 
实用工具库
语言支持
类型支持 (基本类型,RTTI)
库特性测试宏 (C++20)
动态内存管理
程序实用工具
协程支持 (C++20)
可变参数函数
调试支持
(C++26)
三方比较
(C++20)
(C++20)(C++20)(C++20)
(C++20)(C++20)(C++20)
通用实用工具
日期和时间
函数对象
格式化库 (C++20)
(C++11)
关系运算符 (C++20 中已弃用)
整数比较函数
(C++20)(C++20)(C++20)   
(C++20)
交换类型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
通用词汇类型
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)
基本字符串转换
(C++17)
(C++17)

 
 
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> 的公有静态成员函数) [编辑]