Поделиться через


Многоточия и аргументы по умолчанию

Чтобы функции принимали меньше аргументов, чем указано в определении функции, их можно определять, используя многоточие (...) или аргументы по умолчанию.

Многоточие означает, что аргументы могут требоваться, но их число и типы не определены в объявлении. Это обычно плохой стиль программирования на языке 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.

См. также

Ссылки

Многоточие (...)