std::source_location:: current
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
| Creation | ||||
|
source_location::current
|
||||
| Field access | ||||
|
static
consteval source_location current
(
)
noexcept
;
|
(depuis C++20) | |
Construit un nouvel objet
source_location
correspondant à l'emplacement du site d'appel.
Table des matières |
Paramètres
(aucun)
Valeur de retour
Si
current()
est invoqué directement (via un appel de fonction qui nomme
current()
), il retourne un objet
source_location
avec des valeurs définies par l'implémentation représentant l'emplacement de l'appel. Les valeurs doivent être affectées par la
#line
directive du préprocesseur
de la même manière que les macros prédéfinies
__LINE__
et
__FILE__
.
Si
current()
est utilisé dans un
initialiseur de membre par défaut
, la valeur de retour correspond à l'emplacement de la définition du constructeur ou de l'
initialisation agrégée
qui initialise le membre de données.
Si
current()
est utilisé dans un argument par défaut, la valeur de retour correspond à l'emplacement de l'appel à
current()
au site d'appel.
Si
current()
est invoqué de toute autre manière, la valeur de retour n'est pas spécifiée.
Notes
std::source_location::current
nécessite généralement une implémentation intégrée au compilateur.
Exemple
#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) // les valeurs du membre font référence à l'emplacement de la fonction appelante {} src_rec(int i) : // les valeurs du membre font référence à cet emplacement dummy(i) {} src_rec(double) // les valeurs du membre font référence à cet emplacement {} }; 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'; }
Sortie possible :
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()
Voir aussi
construit un nouveau
source_location
avec des valeurs définies par l'implémentation
(fonction membre publique) |
|
|
[static]
|
obtient la trace de pile actuelle ou sa partie spécifiée
(fonction membre publique statique de
std::basic_stacktrace<Allocator>
)
|