std::source_location
| Definiert in Header <source_location> |
||
| struct source_location; |
(seit C++20) | |
Die Klasse std::source_location repräsentiert bestimmte Informationen über den Quellcode, wie z.B. Dateinamen, Zeilennummern und Funktionsnamen. Zuvor mussten Funktionen, die diese Informationen über die Aufrufstelle erhalten wollten (zu Protokollierungs-, Test- oder Debugging-Zwecken), Makros verwenden, damit vordefinierte Makros wie __LINE__ und __FILE__ im Kontext des Aufrufers expandiert werden. Die Klasse std::source_location bietet eine bessere Alternative.
std::source_location erfüllt die Anforderungen an DefaultConstructible, CopyConstructible, CopyAssignable, Destructible und Swappable.
Zusätzlich sind die folgenden Bedingungen true
- std::is_nothrow_move_constructible_v<std::source_location>,
- std::is_nothrow_move_assignable_v<std::source_location>, und
- std::is_nothrow_swappable_v<std::source_location>.
Es ist beabsichtigt, dass std::source_location eine geringe Größe hat und effizient kopiert werden kann.
Es ist nicht spezifiziert, ob die Kopier-/Verschiebekonstruktoren und die Kopier-/Verschiebezuweisungsoperatoren von std::source_location trivial und/oder constexpr sind.
Inhalt |
[bearbeiten] Memberfunktionen
Erzeugung | |
erzeugt eine neue source_location mit implementierungsdefinierten Werten(public member function) | |
| [static] |
erzeugt eine neue source_location, die dem Ort der Aufrufstelle entspricht(public static member function) |
Feldzugriff | |
| gibt die von diesem Objekt repräsentierte Zeilennummer zurück (public member function) | |
| gibt die von diesem Objekt repräsentierte Spaltennummer zurück (public member function) | |
| gibt den von diesem Objekt repräsentierten Dateinamen zurück (public member function) | |
| gibt den Namen der von diesem Objekt repräsentierten Funktion zurück, falls vorhanden (public member function) | |
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_source_location |
201907L |
(C++20) | Erfassung von Quellcodeinformationen (std::source_location) |
[bearbeiten] 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); // line 20 } int main(int, char*[]) { log("Hello world!"); // line 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!
[bearbeiten] Siehe auch
| ändert die Zeilennummer des Quellcodes und optional den aktuellen Dateinamen (preprocessing directive) | |
| (C++23) |
Repräsentation einer Auswertung in einem Stacktrace (class) |