Espaços nominais
Variantes
Acções

Funções

Da cppreference.com
< cpp‎ | language

Funções são entidades C++ que associam uma sequência de instruções (um corpo de função) com um nome e uma lista de zero ou mais parâmetros de função.

// nome de função: "eimpar"// lista de parâmetro tem um parâmetro, com nome "n" e tipo int// o tipo de retorno é boolbool eimpar(int n){// o corpo da função começareturn n %2;}// o corpo da função termina

Quando uma função é invocada, e.g. numa expressão de chamada-de-função, os parâmetros são inicializados dos argumentos (ou providos no lugar de chamada ou defaultados) e as instruções no corpo de função são executadas.

int main(){for(int arg :{-3, -2, -1, 0, 1, 2, 3})std::cout<< eimpar(arg)<<' ';// eimpar chamada 7 vezes, cada// vez n é inicializado de cópia de arg}

Uma função pode terminar ao retornar ou ao lançar/throw uma exceção.

Uma função pode ser uma co-rotina, em tal caso ela pode suspender execução para ser continuada depois.


(desde C++20)

Uma declaração de função pode aparecer em qualquer escopo, mas uma definição de função somente pode aparecer em escopo de namespace, para funções membros e friends, em escopo de classe. Uma função que é declarada num corpo de classe sem um especificador friend é uma função membro de classe. Tais funções têm muitas propriedades adicionais, veja funções membro para detalhes.

Funções não são objetos: não há arrays de funções e funções não podem ser passadas por valor ou retornadas de outras funções. Pointers e referências a funções são permitidos, e podem ser usados onde funções em si não podem.

Cada função tem um tipo, que consiste do tipo de retorno da função, os tipos de todos os parâmetros (depois de transformações array-a-pointer e função-a-pointer, veja lista de parâmetro), seja a função noexcept ou não(desde C++17), e, para funções membros não-estáticos, qualificação-cv and qualificação-ref(desde C++11). Tipos de função também têm ligação de linguagem. Não há tipos de função cv-qualificados (não ser confundido com os tipos de funções qualificadas-cv tais como int f()const; ou funções retornando tipos qualificados-cv, tais como std::stringconst f();). Quualquer cv-qualifier / qualificador-cv é ignorado se ele é adicionado a um alias para uma tipo de função.

Funções não-nomeadas podem ser geradas por lambda-expressions / expressões-lambda.


(desde C++11)

Múltiplas funções no mesmo escopo podem ter o mesmo nome, tão longas quanto suas listas de parâmetro e, para funções membros não-estáticas, qualificações-cv/ref(desde C++11) são diferentes. Isto é conhecido como sobrecarga de função. Declarações de função que diferem somente no tipo de retorno e na especificação noexcept(desde C++17) não podem ser sobrecarregadas.

[editar]Objetos de função

Além de lvalues de função, a expressão de chamada de função suporta pointers para funções, e qualquer valor de tipo de classe que sobrecarrega o operador de chamada-de-função ou é conversível a pointer de função (incluindo lambda-expressions)(desde C++11). Juntos, estes tipos são conhecidos como FunctionObjects, e eles são usados ubiquamente pela biblioteca standard C++, veja por exemplo, usos de BinaryPredicate e Compare.

A biblioteca standard também provê um número de templates de objeto de função pré-definidos assim como os métodos para compor novos (incluindo std::less, std::mem_fn, std::bind, e std::function(desde C++11)).

close