std::source_location
| Definiert in der Header-Datei <source_location>
|
||
struct source_location;
|
(seit C++20) | |
Die Klasse std::source_location repräsentiert bestimmte Informationen über den Quellcode, wie Dateinamen, Zeilennummern und Funktionsnamen. Bisher mussten Funktionen, die diese Informationen über die Aufrufstelle erhalten wollten (zu Protokollierungs-, Test- oder Debugging-Zwecken), Makros verwenden, damit vordefinierte Makros wie und __LINE__ __FILE__ im Kontext des Aufrufers expandiert werden. Die Klasse std::source_location bietet eine bessere Alternative.
std::source_location erfüllt die Anforderungen DefaultConstructible, CopyConstructible, CopyAssignable, Destructible und Swappable.
Darüber hinaus sind die folgenden Bedingungen true:
std::is_nothrow_move_constructible_v<std::source_location>,std::is_nothrow_move_assignable_v<std::source_location>undstd::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 festgelegt, ob die Kopier-/Verschiebekonstruktoren und die Kopier-/Verschiebezuweisungsoperatoren von std::source_location trivial und/oder constexpr sind.
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) |
|
|
(C++23)
|
Darstellung einer Auswertung in einem Stacktrace
(Klasse) |