Namespaces
Variants

std:: source_location

From cppreference.net
Utilities library
Definiert im Header <source_location>
struct source_location ;
(seit C++20)

Die std::source_location -Klasse repräsentiert bestimmte Informationen über den Quellcode, wie Dateinamen, Zeilennummern und Funktionsnamen. Bisher mussten Funktionen, die diese Informationen über den Aufrufort erhalten möchten (für Protokollierung, Tests oder Debugging-Zwecke), Makros verwenden, damit vordefinierte Makros wie __LINE__ und __FILE__ im Kontext des Aufrufers expandiert werden. Die std::source_location -Klasse bietet eine bessere Alternative.

std::source_location erfüllt die Anforderungen DefaultConstructible , CopyConstructible , CopyAssignable , Destructible und Swappable .

Zusätzlich sind die folgenden Bedingungen true :

Es ist beabsichtigt, dass std::source_location eine geringe Größe hat und effizient kopiert werden kann.

Es ist nicht spezifiziert, ob die Kopier-/Move-Konstruktoren und die Kopier-/Move-Zuweisungsoperatoren von std::source_location trivial und/oder constexpr sind.

Inhaltsverzeichnis

Memberfunktionen

Erstellung
konstruiert ein neues source_location mit implementierungsdefinierten Werten
(öffentliche Elementfunktion)
[static]
konstruiert ein neues source_location entsprechend der Position des Aufruforts
(öffentliche statische Elementfunktion)
Feldzugriff
gibt die von diesem Objekt repräsentierte Zeilennummer zurück
(öffentliche Elementfunktion)
gibt die von diesem Objekt repräsentierte Spaltennummer zurück
(öffentliche Elementfunktion)
gibt den von diesem Objekt repräsentierten Dateinamen zurück
(öffentliche Elementfunktion)
gibt den Namen der von diesem Objekt repräsentierten Funktion zurück, falls vorhanden
(öffentliche Elementfunktion)

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_source_location 201907L (C++20) Quellcode-Information-Erfassung ( std::source_location )

Beispiel

#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); // Zeile 20
}
int main(int, char*[])
{
    log("Hello world!"); // Zeile 25
    fun("Hello C++20!");
}

Mögliche Ausgabe:

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!

Siehe auch

ändert die Zeilennummer des Quellcodes und optional den aktuellen Dateinamen
(Präprozessor-Direktive)
Darstellung einer Auswertung in einem Stacktrace
(Klasse)