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. Lvalue объекта std::source_location удовлетворяет требованию 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
[статический]
создает новый объект 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);
}
 
int main(int, char*[])
{
    log("Hello world!");
    fun("Hello C++20!");
}

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

file: main.cpp(23:8) `int main(int, char**)`: Hello world!
file: main.cpp(18: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/w/cpp/utility/source_location

Spec-Zone.ru

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