Výpustky a výchozí argumenty
Funkce mohou být deklarovány pro přijmutí méně argumentů, než je určeno v definici funkce, pomocí dvou metod: tři tečky (...) nebo výchozí argumenty.
Symbol tří teček označuje, že argumenty mohou být požadovány, ale že počet a typy nejsou uvedené v deklaraci.Toto je obvykle nedostatečná praxe programování v jazyce C++, protože to anuluje jednu z výhod typu jazyka C++:.Různé konverze se použijí na funkce deklarované s elipsami spíše než s těmito funkcemi, u kterých je známo, že formální a skutečné typy argumentů jsou známé:
Je-li skutečný argument typu float, je povýšen na typ dvojité před voláním funkce.
Každý podepsaný nebo nepodepsaný řetězec char, krátký, výčtový typ nebo bitové pole budou převedeny na podepsaný nebo nepodepsaný řetězec int pomocí integrální propagace.
Kterýkoli argument typu třídy je předán podle hodnoty jako datová struktura; kopie je vytvořena binárním kopírováním namísto vyvoláním konstruktoru třídy kopie (pokud existuje).
Pokud se použije symbol tří teček, musí být deklarován poslední v seznamu argumentů.Další informace o předávání proměnného počtu argumentů naleznete v diskuzi o va_arg, va_start a va_list v Referenční knihovně runtime.
Další informace o výchozích argumentech v CLR programování naleznete v tématu Seznamy argumentů s proměnnou délkou (...) (C++/CLI).
Výchozí argumenty umožňují zadat hodnotu, kterou by měl předpokládat argument, pokud žádná není zadána ve volání funkce.Následující fragment kódu ukazuje, jak pracuje výchozí argument.Další informace o omezeních týkajících se určení výchozích argumentů naleznete v tématu Výchozí argumenty.
// 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;
}
Předchozí program deklaruje funkci print, která přijímá dva argumenty.Druhý argument, terminator, však má výchozí hodnotu "\n".V main první dvě volání na print umožňují výchozímu druhému argumentu dodat novému řádku ukončení tištěného řetězce.Třetí volání určuje explicitní hodnotu pro druhý argument.Výstup z programu je
hello,
world!
good morning, sunshine.