Partager via


Ellipses et arguments par défaut

Les fonctions peuvent être déclarées pour accepter moins d'arguments que le nombre spécifié dans la définition de fonction, en utilisant l'une des deux méthodes suivantes : points de suspension (...) ou arguments par défaut.

Les points de suspension indiquent que des arguments peuvent être requis mais que leur nombre et leurs types ne sont pas spécifiés dans la déclaration. C'est habituellement une mauvaise pratique de programmation C++ car elle occulte l'un des avantages du C++ : la sécurité de type. Différentes conversions sont appliquées aux fonctions déclarées avec des points de suspension par rapport aux fonctions pour lesquelles les types d'argument formels et réels sont connus :

  • Si l'argument réel est de type float, il est promu au type double avant l'appel de la fonction.

  • Tout type char, short, type énuméré ou champ de bits signé ou non signé est converti en un int signé ou non signé à l'aide de la promotion intégrale.

  • Tout argument de type classe est transmis par valeur comme une structure de données. La copie est créée par copie binaire plutôt que par appel d'un constructeur de copie de la classe (le cas échéant).

Les points de suspension, s'ils sont utilisés, doivent être déclarés en dernier dans la liste d'arguments. Pour plus d'informations sur la transmission d'un nombre variable d'arguments, consultez la description de va_arg, va_start et va_list dans la Référence de la bibliothèque Runtime.

Pour plus d'informations sur les arguments par défaut dans la programmation CLR, consultez ... (Listes d'arguments variables).

Les arguments par défaut vous permettent de spécifier la valeur qu'un argument doit prendre si aucune n'est fournie dans l'appel de fonction. Le fragment de code suivant montre le fonctionnement des arguments par défaut. Pour plus d'informations sur les restrictions relatives à la spécification des arguments par défaut, consultez Arguments par défaut.

// expre_Ellipses_and_Default_Arguments.cpp
// compile with: /EHsc
#include <iostream>

// Declare the function print that prints a string,
// then a terminator.
void print( const char *string,
            const char *terminator = "\n" );

int main()
{
    print( "hello," );
    print( "world!" );

    print( "good morning", ", " );
    print( "sunshine." );
}

using namespace std;
// Define print.
void print( const char *string, const char *terminator )
{
    if( string != NULL )
        cout << string;

    if( terminator != NULL )
        cout << terminator;
}

Le programme précédent déclare une fonction, print, qui accepte deux arguments. Toutefois, le deuxième argument, terminator, a la valeur par défaut "\n". Dans main, les deux premiers appels à print permettent au deuxième argument par défaut de fournir une nouvelle ligne pour terminer la chaîne imprimée. Le troisième appel indique une valeur explicite pour le deuxième argument. Le résultat généré par le programme est

hello,
world!
good morning, sunshine.

Voir aussi

Référence

Points de suspension (...)