Freigeben über


Ellipsen und Standardargumente

Funktionen können deklariert werden, um weniger Argumente als in der Funktionsdefinition angegeben mit einer der folgenden beiden Methoden zu akzeptieren: Auslassungspunkte (...) oder Standardargumente.

Auslassungspunkte geben an, dass Argumente möglicherweise erforderlich sind, dass die Anzahl und Typen jedoch nicht in der Deklaration angegeben werden. Dies ist normalerweise ein schlechtes Beispiel für C++-Programmierung, da es einen der Vorteile von C++ unterlaufen kann: Typsicherheit. Verschiedene Konvertierungen werden auf Funktionen angewendet, die mit Auslassungszeichen deklariert sind, und nicht auf jene Funktionen, deren formale und tatsächliche Argumenttypen bekannt sind:

  • Wenn das tatsächliche Argument vom Typ float ist, wird es vor dem Funktionsaufruf auf den Typ double hochgestuft.

  • Jeder char-, short-, enumerierte Typ bzw. jedes Bit-Feld mit oder ohne Vorzeichen wird mittels ganzzahliger Heraufstufung in int mit oder ohne Vorzeichen konvertiert.

  • Jedes Argument des Klassentyps wird durch einen Wert als Datenstruktur übergeben; die Kopie wird durch Kopieren der Binärdatei statt durch Aufrufen des Kopierkonstruktors der Klasse erstellt (falls vorhanden).

Ellipsen müssen in der Argumentliste zuletzt deklariert werden, sofern sie vorhanden sind. Weitere Informationen zum Übergeben einer variablen Anzahl von Argumenten finden Sie in den Ausführungen zu va_arg, va_start und va_list in der Laufzeitbibliotheksreferenz.

Weitere Informationen zu Standardargumenten in der CLR-Programmierung finden Sie unter Variable Argumentlisten (...) (C++/CLI).

Mit Standardargumenten können Sie den Wert festlegen, den ein Argument annehmen soll, wenn keiner im Funktionsaufruf angegeben wird. Das folgende Codefragment zeigt, wie Standardargumente funktionieren. Weitere Informationen zu Einschränkungen beim Festlegen von Standardargumenten, finden Sie unter Standardargumente.

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

Das vorangehende Programm deklariert eine Funktion, print, die zwei Argumente akzeptiert. Das zweite Argument, terminator, weist jedoch einen Standardwert, "\n", auf. In main ermöglichen die ersten beiden Aufrufe von print dem zweiten Standardargument die Bereitstellung einer neuen Zeile, um die gedruckte Zeichenfolge zu beenden. Der dritte Aufruf gibt einen expliziten Wert für das zweite Argument zurück. Die Ausgabe des Programms lautet

hello,
world!
good morning, sunshine.

Siehe auch

Referenz

Auslassungszeichen (...)