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 main 12 src_rec 15 src_rec 34 main 34 main 36 main 25 src_make
参阅
构造拥有实现定义的值的新 source_location (公开成员函数) |