std::stacktrace_entry::current
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 со значениями, определёнными реализацией (public функция-элемент) | |
[static] |
получает текущую трассировку стека или её заданную часть (public static функция-элемент std::basic_stacktrace<Allocator>)
|