Многоточия и аргументы по умолчанию
Чтобы функции принимали меньше аргументов, чем указано в определении функции, их можно определять, используя многоточие (...) или аргументы по умолчанию.
Многоточие означает, что аргументы могут требоваться, но их число и типы не определены в объявлении. Это обычно плохой стиль программирования на языке C++, поскольку он сводит на нет одно из преимуществ этого языка: безопасность типа. Для функций, объявленных с многоточием, применяются иные преобразования, нежели для функций, для которых известны типы формальных и фактических аргументов.
Если фактический аргумент имеет тип float, то перед вызовом функции он повышается до типа double.
Любой знаковый или беззнаковый тип char, short, перечислимый тип или битовое поле преобразуется в знаковый или беззнаковый тип int с помощью восходящего приведения целого типа.
Любой аргумент типа класса передается по значению в виде структуры данных; копия создается путем двоичного копирования, а не путем вызова конструктора копии класса (если он имеется).
Многоточие (если оно используется) необходимо объявлять последним в списке аргументов. Дополнительные сведения о передаче переменного числа аргументов см. в разделе описания va_arg, va_start и va_list в Справочнике по библиотеке времени выполнения.
Сведения об аргументах по умолчанию при программировании в среде CLR см. в разделе ... Переменные (списки аргументов).
Аргументы по умолчанию позволяют задать значение, которое должен принять аргумент, если в вызове функции значение не передано. В следующем фрагменте кода показано, как работают аргументы по умолчанию. Дополнительные сведения об ограничениях на задание аргументов по умолчанию см. в разделе Аргументы по умолчанию.
// 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;
}
Представленная выше программа объявляет функцию print, принимающую два аргумента. Однако второй аргумент (terminator) имеет значение по умолчанию — "\n". В разделе main первые два вызова функции print позволяют второму аргументу по умолчанию предоставить новую строку для завершения печатаемой строки. В третьем вызове указывается явное значение второго аргумента. После выполнения этой программы выводится следующий результат:
hello,
world!
good morning, sunshine.