Spec-Zone.ru › C++

std::source_location

Определён в заголовочном файле <source_location>
struct source_location;
(начиная с C++20)

Класс std::source_location представляет определённую информацию об исходном коде, такую как имена файлов, номера строк и имена функций. Ранее функции, которым требовалась эта информация о месте вызова (для журналирования, тестирования или отладки), должны были использовать макросы, чтобы предопределённые макросы, такие как __LINE__ и __FILE__, раскрывались в контексте вызывающей стороны. Класс std::source_location предлагает более удобную альтернативу.

std::source_location удовлетворяет требованиям DefaultConstructible, CopyConstructible, CopyAssignable, Destructible и Swappable.

Кроме того, выполняются следующие условия: true:

  • std::is_nothrow_move_constructible_v<std::source_location>,
  • std::is_nothrow_move_assignable_v<std::source_location> и
  • std::is_nothrow_swappable_v<std::source_location>.

Предполагается, что std::source_location имеет небольшой размер и эффективно копируется.

Не определено, являются ли конструкторы копирования/перемещения и операторы присваивания копированием/перемещением для std::source_location тривиальными и/или constexpr.

Функции-члены

Создание
(конструктор)
создаёт новый source_location со значениями, определяемыми реализацией
(открытая функция-член)
current
[static]
создаёт новый source_location, соответствующий месту вызова
(открытая статическая функция-член)
Доступ к полям
line
возвращает номер строки, представленный этим объектом
(открытая функция-член)
column
возвращает номер столбца, представленный этим объектом
(открытая функция-член)
file_name
возвращает имя файла, представленное этим объектом
(открытая функция-член)
function_name
возвращает имя функции, представленной этим объектом, если оно есть
(открытая функция-член)

Примечания

Макрос проверки поддержки возможностей Значение Стандарт Возможность
__cpp_lib_source_location 201907L (C++20) Получение информации об исходном коде (std::source_location)

Пример

#include <iostream>
#include <source_location>
#include <string_view>

void log(const std::string_view message,
         const std::source_location location =
               std::source_location::current())
{
    std::clog << "file: "
              << location.file_name() << '('
              << location.line() << ':'
              << location.column() << ") `"
              << location.function_name() << "`: "
              << message << '\n';
}

template<typename T>
void fun(T x)
{
    log(x); // line 20
}

int main(int, char*[])
{
    log("Hello world!"); // line 25
    fun("Hello C++20!");
}

Возможный вывод:

file: main.cpp(25:8) `int main(int, char**)`: Hello world!
file: main.cpp(20:8) `void fun(T) [with T = const char*]`: Hello C++20!

См. также

#line
изменяет номер строки исходного кода и, при необходимости, имя текущего файла
(директива препроцессора)
stacktrace_entry
(C++23)
представление вычисления в трассировке стека
(класс)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/source_location

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API