Partilhar via


Reticências e argumentos padrão

As funções podem ser declaradas para aceitar menos argumentos do que o especificado na definição da função, usando um de dois métodos: reticências (...) ou argumentos padrão.

As reticências denotam que os argumentos podem ser necessários, mas que o número e os tipos não estão especificados na declaração. Essa geralmente é uma prática inadequada de programação do C++ porque ela elimina um dos benefícios de segurança do tipo C++:. Conversões diferentes são aplicadas às funções declaradas com reticências do que nas funções para as quais os tipos de argumento formal e real são conhecidos:

  • Se o argumento real for do tipo float, ele será promovido para o tipo double antes da chamada de função.

  • Qualquer tipo enumerado char, short com sinal ou sem sinal, ou campo de bits, é convertido em int com sinal ou sem sinal usando a promoção de integral.

  • Qualquer argumento de tipo de classe é passado por valor como estrutura de dados; a cópia é criada por cópia binário em vez de chamar o construtor de cópia de classe (se houver).

As reticências, se usadas, deverão ser declaradas por último na lista de argumentos. Para obter mais informações sobre como passar um número variável de argumentos, consulte os tópicos sobre va_arg, va_start e va_list na Referência da biblioteca em tempo de execução.

Para obter informações sobre os argumentos padrão na programação CLR, consulte ... (Listas de argumentos variável).

Os argumentos padrão permitem que você especifique o valor que um argumento deverá assumir caso nenhum seja fornecido na chamada de função. O fragmento de código a seguir mostra como os argumentos padrão funcionam. Para obter mais informações sobre as restrições na especificação de argumentos padrão, consulte Argumentos padrão.

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

O programa anterior declara uma função, print, que usa dois argumentos. No entanto, o segundo argumento, terminator, tem um valor padrão, "\n". Em main, as duas primeiras chamadas a print permitem que o segundo argumento padrão forneça uma nova linha para finalizar a cadeia de caracteres impressa. A terceira chamada especifica um valor explícito para o segundo argumento. A saída do programa é

hello,
world!
good morning, sunshine.

Consulte também

Referência

Reticências (...)