std::source_location::current
static consteval source_location current() noexcept; |
(desde C++20) | |
Construye un nuevo objeto source_location
que corresponde a la ubicación del sitio de llamada.
Contenido |
[editar] Parámetros
(Ninguno)
[editar] Valor de retorno
Si current()
se invoca directamente (vía una llamada a función que nombra a current()
), devuelve un objeto source_location
con valores definidos por la implementación que representan la ubicación de la llamada. Los valores deberán ser afectados por la directriz de preprocesador #line
de la misma manera que las macros predefinidas __LINE__ y __FILE__.
Si current()
se usa en un inicialiador de miembro por defecto, el valor de retorno corresponde a la ubicación de la definición del contructor o la inicialización de agregado que inicializa el dato miembro.
Si current()
se usa en un argumento por defecto, el valor de retorno corresponde a la ubicación de la llamada a current()
en el sitio de llamada.
Si current()
se invoca de cualquier otra manera, el valor de retorno no está especificado.
[editar] Notas
std::source_location::current
típicamente require la implementación integrada del compilador.
[editar] Ejemplo
#include <source_location> #include <iostream> struct src_rec { std::source_location ubicacion = std::source_location::current(); int dummy = 0; src_rec(std::source_location ubi = std::source_location::current()) : ubicacion(ubi) // valores del miembro se refieren a la ubicación de la función llamante {} src_rec(int i) : // valores del miembro se refieren a esta ubicación dummy(i) {} src_rec(double) // valores del miembro se refieren a esta ubicación {} }; 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.ubicacion.line() << ' ' << srec0.ubicacion.function_name() << '\n' << srec1.ubicacion.line() << ' ' << srec1.ubicacion.function_name() << '\n' << srec2.ubicacion.line() << ' ' << srec2.ubicacion.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'; }
Posible salida:
31 main 12 src_rec 15 src_rec 34 main 34 main 36 main 25 src_make
[editar] Véase también
Construye un nuevo objeto de tipo source_location con valores definidos por la implementación. (función miembro pública) |