Пространства имён
Варианты
Действия

std::source_location

Материал из cppreference.com
 
 
Библиотека утилит
Языковая поддержка
Поддержка типов (базовые типы, RTTI)
Макросы тестирования функциональности библиотеки (C++20)    
Управление динамической памятью
Программные утилиты
Поддержка сопрограмм (C++20)
Вариативные функции
Трёхстороннее сравнение (C++20)
(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)
 
 
<tbody> </tbody>
Определено в заголовочном файле <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 со значениями, определёнными реализацией
(public функция-элемент) [править]
[static]
создаёт новый source_location, соответствующий местоположению места вызова
(public static функция-элемент) [править]
Доступ к полям
возвращает номер строки, представленный этим объектом
(public функция-элемент) [править]
возвращает номер столбца, представленный этим объектом
(public функция-элемент) [править]
возвращает имя файла, представленное этим объектом
(public функция-элемент) [править]
возвращает имя функции, представленное этим объектом, если таковая имеется
(public функция-элемент) [править]

Примечание

Макрос Тестирования функциональности Значение Стандарт Функциональность
__cpp_lib_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::cout << "файл: "
              << 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("Привет мир!");
    fun("Привет C++20!");
}

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

файл: main.cpp(23:8) `int main(int, char**)`: Привет мир!
файл: main.cpp(18:8) `void fun(T) [with T = const char*]`: Привет C++20!

Смотрите также

изменяет номер строки исходного кода и, необязательно, текущее имя файла
(директива предварительной обработки) [править]
представление вычисления в трассировке стека
(класс) [править]