std::source_location:: current
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Creation | ||||
|
source_location::current
|
||||
| Field access | ||||
|
static
consteval source_location current
(
)
noexcept
;
|
(seit C++20) | |
Konstruiert ein neues
source_location
Objekt, das dem Ort des Aufrufstandorts entspricht.
Inhaltsverzeichnis |
Parameter
(keine)
Rückgabewert
Wenn
current()
direkt aufgerufen wird (durch einen Funktionsaufruf, der
current()
benennt), gibt es ein
source_location
-Objekt mit implementierungsdefinierten Werten zurück, die den Ort des Aufrufs repräsentieren. Die Werte sollten durch die
#line
Präprozessor-Direktive
in derselben Weise beeinflusst werden wie die vordefinierten Makros
__LINE__
und
__FILE__
.
Wenn
current()
in einem
Default-Member-Initialisierer
verwendet wird, entspricht der Rückgabewert dem Ort der Konstruktordefinition oder der
Aggregatinitialisierung
, die das Datenelement initialisiert.
Wenn
current()
in einem Default-Argument verwendet wird, entspricht der Rückgabewert dem Ort des Aufrufs von
current()
an der Aufrufstelle.
Wenn
current()
auf andere Weise aufgerufen wird, ist der Rückgabewert nicht spezifiziert.
Hinweise
std::source_location::current
erfordert typischerweise eine vom Compiler bereitgestellte Implementierung.
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) // Werte des Members beziehen sich auf den Ort der aufrufenden Funktion {} src_rec(int i) : // Werte des Members beziehen sich auf diesen Ort dummy(i) {} src_rec(double) // Werte des Members beziehen sich auf diesen Ort {} }; 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()
Siehe auch
konstruiert einen neuen
source_location
mit implementierungsdefinierten Werten
(öffentliche Elementfunktion) |
|
|
[static]
|
ermittelt den aktuellen Stacktrace oder seinen angegebenen Teil
(öffentliche statische Elementfunktion von
std::basic_stacktrace<Allocator>
)
|