Namespaces
Variants

std::source_location::current

Von de.cppreference.net
 
 
Hilfsbibliothek
Sprachunterstützung
Typunterstützung (grundlegende Typen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programmhilfsmittel
Funktionen mit variabler Argumentanzahl
Koroutinenunterstützung (C++20)
Vertragsunterstützung (C++26)
Dreiseitiger Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Hilfsmittel
Relationsoperatoren (veraltet in C++20)
Ganzzahlvergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Swap und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
static consteval source_location current() noexcept;
(seit C++20)

Konstruiert ein neues source_location Objekt, das dem Ort der Aufrufstelle entspricht.

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 <print>
#include <source_location>

struct src_rec
{
    std::source_location srcl = std::source_location::current();
    int dummy{};

    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()
{
    return std::source_location::current();
}

int main()
{
    const auto r0 = src_rec();
    const auto r1 = src_rec(0);
    const auto r2 = src_rec(0.0);
    const auto s0 = std::source_location::current();
    const auto s1 = src_clone(s0);
    const auto s2 = src_clone();
    const auto s3 = src_make();

    std::println("#{1} {0} {2}", "r0", r0.srcl.line(), r0.srcl.function_name());
    std::println("#{1} {0} {2}", "r1", r1.srcl.line(), r1.srcl.function_name());
    std::println("#{1} {0} {2}", "r2", r2.srcl.line(), r2.srcl.function_name());
    std::println("#{1} {0} {2}", "s0", s0.line(), s0.function_name());
    std::println("#{1} {0} {2}", "s1", s1.line(), s1.function_name());
    std::println("#{1} {0} {2}", "s2", s2.line(), s2.function_name());
    std::println("#{1} {0} {2}", "s3", s3.line(), s3.function_name());
}

Mögliche Ausgabe:

#31 r0 int main()
#13 r1 src_rec::src_rec(int)
#16 r2 src_rec::src_rec(double)
#34 s0 int main()
#34 s1 int main()
#36 s2 int main()
#26 s3 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> )