Variadic functions
De cppreference.com
![]() |
Esta página se ha traducido por ordenador/computador/computadora de la versión en inglés de la Wiki usando Google Translate.
La traducción puede contener errores y palabras aparatosas/incorrectas. Planea sobre el texto para ver la versión original. Puedes ayudar a corregir los errores y mejorar la traducción. Para instrucciones haz clic aquí. |
Variadic funciones son funciones (std::printf, por ejemplo) que tienen un número variable de argumentos .
Original:
Variadic functions are functions (e.g. std::printf) which take a variable number of arguments.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Contenido |
[editar] Usage
Para declarar una función variadic, los puntos suspensivos se usa como el último parámetro, por ejemplo, int printf(const char *format, ...);. Los parámetros pasados a una función variadic se puede acceder usando las macros y los modelos siguientes:
Original:
To declare a variadic function, an ellipsis is used as the last parameter, e.g. int printf(const char *format, ...);. Parameters passed to a variadic function can be accessed using the following macros and types:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Definido en el archivo de encabezado
<cstdarg> | |
Permite el acceso a los argumentos de función variádica. (macro de función) | |
Accede al siguiente argumento de función variádica. (macro de función) | |
(C++11) |
Crea una copia de los argumentos de función variádica. (macro de función) |
Termina el recorrido de los argumentos de función variádica. (macro de función) | |
Contiene la información necesaria para va_start , va_arg va_end y va_copy . (clase) |
[editar] Conversiones predeterminadas
Cuando una función variadic se llama, después de valor-i-a-valor p, matriz a puntero, y conversiones función a puntero, cada argumento de que es una parte de la lista de argumentos variable se somete a conversiones adicionales llamados promociones predeterminados argumento ' ':
Original:
When a variadic function is called, after lvalue-to-rvalue, array-to-pointer, and function-to-pointer conversiones, each argument that is a part of the variable argument list undergoes additional conversions known as default argument promotions:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
- std::nullptr_t se convierte en void*Original:std::nullptr_t is converted to void*The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - Argumentos float se convierten a double como en de punto flotante de promociónOriginal:The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - bool, char, enumeraciones short, y sin ámbito se convierten en int o más amplios tipos enteros como en promoción enteroOriginal:bool, char, short, and unscoped enumerations are converted to int or wider integer types as in promoción enteroThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Sólo aritmética, enumeración, puntero, puntero a miembro, y los argumentos de la clase de tipo se admiten .
Original:
Only arithmetic, enumeration, pointer, pointer to member, and class type arguments are allowed.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
[editar] Alternativas
- Variadic plantillas también se puede utilizar para crear funciones que toman número variable de argumentos. Ellos son a menudo la mejor opción, ya que no imponen restricciones a los tipos de los argumentos, no realice promociones integral y de punto flotante, y son de tipo seguro. (desde C++11)Original:Variadic templates can also be used to create functions that take variable number of arguments. They are often the better choice because they do not impose restrictions on the types of the arguments, do not perform integral and floating-point promotions, and are type safe. (desde C++11)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - Si todos los argumentos variables comparten un tipo común, un std::initializer_list proporciona un mecanismo conveniente (aunque con una sintaxis diferente) para acceder a argumentos variables .Original:If all variable arguments share a common type, a std::initializer_list provides a convenient mechanism (albeit with a different syntax) for accessing variable arguments.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
[editar] Ejemplo
Ejecuta este código
#include <iostream> #include <cstdarg> void simple_printf(const char *fmt, ...) { va_list args; va_start(args, fmt); while (*fmt != '\0') { if (*fmt == 'd') { int i = va_arg(args, int); std::cout << i << '\n'; } else if (*fmt == 'c') { // note automatic conversion to integral type int c = va_arg(args, int); std::cout << static_cast<char>(c) << '\n'; } else if (*fmt == 'f') { double d = va_arg(args, double); std::cout << d << '\n'; } ++fmt; } va_end(args); } int main() { simple_printf("dcff", 3, 'a', 1.999, 42.5); }
Salida:
3 a 1.999 42.5