Sobrecarga de função "C ++"

  • Conceito de sobrecarga de funções

A sobrecarga de funções é um caso especial de funções. C ++ permite que várias funções com o mesmo nome com funções semelhantes sejam declaradas no mesmo escopo. As listas de parâmetros (número, tipo, ordem) dessas funções de mesmo nome devem ser diferentes e eles são freqüentemente usados ​​para lidar com a implementação. Funções semelhantes, mas diferentes tipos de dados

Assim como uma palavra em linguagem natural tem múltiplos significados, você precisa julgar o verdadeiro significado da palavra de acordo com o contexto. Mesmo que a palavra esteja sobrecarregada, o compilador em C ++ também chamará a função de mesmo nome de acordo com a situação . Você pode ver a seguinte instância

int Add(int a,int b)
{
    
    
return a+b;
}

double Add(double a,double b)
{
    
    
return a+b;
}

int main()
{
    
    
Add(1,2);
Add(1.0,2.0);//编译器根据情况自己决定调用哪个函数
}
  • Modificação de nome
    Em C /
    C ++, um programa precisa passar por estes estágios para ser executado: pré-processamento, compilação, montagem
    . As regras de modificação de nome da linguagem Ca e C ++ são diferentes. Na linguagem C, as regras de modificação de nome são particularmente simples. Um sublinhado é adicionado na frente do nome da função e C ++ precisa suportar sobrecarga de função, namespaces, etc., o que torna as regras de modificação de nome C ++ mais complicadas. Em C ++, um mecanismo chamado Name Mangling é usado. Name Mangling é um mecanismo que reorganiza os nomes de funções e variáveis ​​durante o processo de compilação. Em termos simples, o compilador passa funções através de um determinado algoritmo para distinguir entre as funções., Re -decorado com um nome exclusivo globalmente.

  • externo "C"

A principal função do extern "C" é implementar corretamente o código C ++ chamando outros códigos de linguagem C. Após adicionar extern "C", o compilador será instruído a compilar esta parte do código em linguagem C em vez de C ++. Como C ++ oferece suporte à sobrecarga de função, o compilador adicionará os tipos de parâmetro da função ao código compilado ao compilar a função, não apenas o nome da função; e a linguagem C não oferece suporte à sobrecarga de função, portanto, compile a função C do código da linguagem não inclui o tipo de parâmetro da função e geralmente inclui o nome da função.
Esta função é muito útil, porque antes do advento do C ++, muito código era escrito em linguagem C, e a biblioteca de baixíssimo nível também era escrita em linguagem C. Para melhor suportar o código C original e o já escrito Biblioteca de linguagem C, é necessário suportar C tanto quanto possível em C ++, e extern "C" é uma das estratégias.

Esta função é usada principalmente nas seguintes situações:

1. O código C ++ chama o código da linguagem C

2. Usado em arquivos de cabeçalho C ++

3. No desenvolvimento colaborativo de várias pessoas, algumas pessoas podem ser melhores na linguagem C, e algumas pessoas são boas em C ++, também será útil neste caso

Em geral, o conhecimento desta seção é resumido nas seguintes questões:
1. As duas funções a seguir podem formar sobrecargas?

void fun(int a=10)
{
    
    
cout<<"void fun(int)"<<endl;
}

void fun(int a)
{
    
    
cout<<"void fun(int)"<<endl;
}

Não vai formar sobrecarga, a sobrecarga de função não tem nada a ver com o padrão, tem a ver com o tipo

2. Por que a linguagem C não suporta sobrecarga de funções?
Como as regras de modificação de nome da linguagem C são muito simples, o nome da função também fará com que o compilador seja incapaz de distinguir

3. Como a camada inferior de sobrecarga de funções é tratada em C ++?
C ++ usa tecnologia de alteração de nome (inclinação) para alterar o nome da função e distinguir funções do mesmo nome com parâmetros diferentes

4. Uma função pode ser compilada no estilo C em C ++?
Sim, adicione extern "C" na frente da função para dizer ao compilador para compilar a função de acordo com as regras da linguagem C

Acho que você gosta

Origin blog.csdn.net/NanlinW/article/details/103033661
Recomendado
Clasificación