Condividi tramite


Puntini di sospensione e argomenti predefiniti

Le funzioni possono essere dichiarate per accettare un numero di argomenti minore rispetto a quello specificato nella definizione di funzione, mediante uno dei due metodi: puntini di sospensione (...) o argomenti predefiniti.

I puntini di sospensione indicano che gli argomenti potrebbero essere obbligatori, ma che il numero e i tipi non sono specificati nella dichiarazione. Si tratta in genere di una procedura di programmazione C++ di basso livello perché vanifica uno dei vantaggi di C++, l'indipendenza dai tipi. Alle funzioni dichiarate con i puntini di sospensione vengono applicate conversioni diverse rispetto a quelle applicate alle funzioni per le quali i tipi di argomenti formali ed effettivi sono noti:

  • Se l'argomento effettivo è di tipo float, viene promosso al tipo double prima della chiamata di funzione.

  • Qualsiasi char con o senza segno, short, tipo enumerato o campo di bit viene convertito in un int con segno e senza segno utilizzando la promozione integrale.

  • Qualsiasi argomento di tipo classe viene passato in base al valore come struttura di dati; la copia viene creata tramite la copia binaria anziché richiamando il costruttore di copia della classe (se presente).

I punti di sospensione, se utilizzati, devono essere dichiarati per ultimi nell'elenco degli argomenti. Per ulteriori informazioni sul passaggio di un numero variabile di argomenti, vedere la discussione relativa a va_arg, va_start e va_list in Riferimenti alla libreria di runtime.

Per informazioni sugli argomenti predefiniti della programmazione CLR, vedere Elenchi di argomenti variabili (...) (C++/CLI).

Gli argomenti predefiniti consentono di specificare il valore che deve assumere un argomento se non viene fornito nella chiamata di funzione. Nel frammento di codice seguente viene illustrato come utilizzare gli argomenti predefiniti. Per ulteriori informazioni sulle restrizioni su come specificare gli argomenti predefiniti, vedere Argomenti predefiniti.

// 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;
}

Nel programma precedente viene dichiarata una funzione, print, che accetta due argomenti. Tuttavia, il secondo argomento, terminator, ha un valore predefinito, "\n". In main, le prime due chiamate a print consentono al secondo argomento predefinito di fornire una nuova riga per terminare la stringa stampata. La terza chiamata specifica un valore esplicito per il secondo argomento. L'output del programma è

hello,
world!
good morning, sunshine.

Vedere anche

Riferimenti

Puntini di sospensione (...)