std::source_location::current
| static consteval source_location current() noexcept; |
(seit C++20) | |
Konstruiert ein neues source_location-Objekt, das dem Aufrufort entspricht.
Inhalt |
[bearbeiten] Parameter
(keine)
[bearbeiten] Rückgabewert
Wenn current() direkt aufgerufen wird (über einen Funktionsaufruf, der current() benennt), gibt es ein source_location-Objekt mit implementierungsdefinierten Werten zurück, die den Aufrufort repräsentieren. Die Werte sollten von der #line Präprozessor-Direktive auf dieselbe Weise beeinflusst werden wie die vordefinierten Makros __LINE__ und __FILE__.
Wenn current() in einem Standard-Member-Initialisierer verwendet wird, entspricht der Rückgabewert dem Ort der Konstruktor-Definition oder der Aggregat-Initialisierung, die das Datenmitglied initialisiert.
Wenn current() in einem Standardargument verwendet wird, entspricht der Rückgabewert dem Ort des Aufrufs von current() am Aufrufort.
Wenn current() auf andere Weise aufgerufen wird, ist der Rückgabewert undefiniert.
[bearbeiten] Anmerkungen
std::source_location::current erfordert typischerweise eine integrierte Implementierung des Compilers.
[bearbeiten] Beispiel
#include <source_location> #include <iostream> struct src_rec { std::source_location srcl = std::source_location::current(); int dummy = 0; src_rec(std::source_location loc = std::source_location::current()) : srcl(loc) // values of member refer to the location of the calling function {} src_rec(int i) : // values of member refer to this location dummy(i) {} src_rec(double) // values of member refer to this location {} }; std::source_location src_clone(std::source_location a = std::source_location::current()) { return a; } std::source_location src_make() { std::source_location b = std::source_location::current(); return b; } int main() { src_rec srec0; src_rec srec1(0); src_rec srec2(0.0); auto s0 = std::source_location::current(); auto s1 = src_clone(s0); auto s2 = src_clone(); auto s3 = src_make(); std::cout << srec0.srcl.line() << ' ' << srec0.srcl.function_name() << '\n' << srec1.srcl.line() << ' ' << srec1.srcl.function_name() << '\n' << srec2.srcl.line() << ' ' << srec2.srcl.function_name() << '\n' << s0.line() << ' ' << s0.function_name() << '\n' << s1.line() << ' ' << s1.function_name() << '\n' << s2.line() << ' ' << s2.function_name() << '\n' << s3.line() << ' ' << s3.function_name() << '\n'; }
Mögliche Ausgabe
31 int main() 12 src_rec::src_rec(int) 15 src_rec::src_rec(double) 34 int main() 34 int main() 36 int main() 25 std::source_location src_make()
[bearbeiten] Siehe auch
erzeugt eine neue source_location mit implementierungsdefinierten Werten(öffentliche Memberfunktion) | |
| [static] |
holt den aktuellen Stacktrace oder dessen gegebenen Teil (öffentliche statische Memberfunktion von std::basic_stacktrace<Allocator>) |