Wielokropki i argumenty domyślne
Funkcje mogą być zadeklarowane do akceptowania mniej argumentów niż określono w definicji funkcji, za pomocą jednej z dwóch metod: wielokropka (...) lub domyślnych argumentów.
Elipsy oznaczają, że argumenty mogą być wymagane, ale że liczba i typy nie są określone w deklaracji.Zwykle jest to zła praktyka programowania C++, ponieważ unieważnia jedną z zalet języka C++: bezpieczeństwo typów.Różne konwersje są stosowane do funkcji zadeklarowanych z wielokropkiem niż te funkcje, dla których są znane typy argumentów formalne i rzeczywiste:
Jeżeli rzeczywisty argument jest typu float, jego poziom jest podnoszony do typu double przed wywołaniem funkcji.
Wszystkie podpisane lub niepodpisane char, krótki, typ wyliczeniowy lub pole bitowe są konwertowane na podpisane lub niepodpisane int za pomocą promocji integralnej.
Każdy argument dla typu klasy jest przekazywany przez wartość jako struktura danych; kopia zostanie utworzona przez skopiowanie binarne zamiast przez wywołanie konstruktora kopiowania klasy (jeśli taka istnieje).
Elipsy, jeśli są używane, muszą być zagwarantowane ostatnio na liście argumentów.Aby uzyskać więcej informacji o przekazywaniu zmiennej liczby argumentów, zobacz omówienie makr va_arg, va_start i va_list w wykazie obiektów biblioteki środowiska uruchomieniowego.
Aby uzyskać informacje o domyślnych argumentach w programowaniu w środowisku CLR, zobacz ... (Zmienna list Argument).
Argumenty domyślne umożliwiają określenie wartości argumentu, które należy przyjąć, jeśli żadna nie zostanie podana w wywołaniu funkcji.Poniższy fragment kodu przedstawia, jak działają argumenty domyślne.Aby uzyskać więcej informacji na temat ograniczeń w określaniu domyślnych argumentów, zobacz Argumenty domyślne.
// 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;
}
Poprzedni program deklaruje funkcję, print, która przyjmuje dwa argumenty.Jednakże drugi argument terminator ma wartość domyślną "\n".W obiekcie main dwa pierwsze wywołania metody print pozwalają domyślnemu drugiemu argumentowi dostarczyć nowy wiersz, aby zakończyć drukowany ciąg.Trzecie wywołanie określa wartość dla drugiego argumentu.Dane wyjściowe z programu to
hello,
world!
good morning, sunshine.