Namespaces
Variants

std::source_location:: current

From cppreference.net
Utilities library
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> )