Sobrecarga de la función "C ++"

  • Concepto de sobrecarga de funciones

La sobrecarga de funciones es un caso especial de funciones. C ++ permite que varias funciones del mismo nombre con funciones similares se declaren en el mismo ámbito. Las listas de parámetros (número, tipo, orden) de estas funciones del mismo nombre deben ser diferentes, y a menudo se utilizan para manejar la implementación. Funciones similares pero diferentes tipos de datos

Al igual que una palabra en lenguaje natural tiene múltiples significados, debe juzgar el verdadero significado de la palabra de acuerdo con el contexto. Incluso si la palabra está sobrecargada, el compilador en C ++ también llamará a la función del mismo nombre según la situación . Puede ver la siguiente instancia

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);//编译器根据情况自己决定调用哪个函数
}
  • Modificación de nombre
    En C /
    C ++, un programa debe pasar por estas etapas para ejecutarse: preprocesamiento, compilación, ensamblado
    . Las reglas de modificación de nombre del lenguaje Ca y C ++ son diferentes. En lenguaje C, las reglas de modificación de nombre son particularmente simples. Un guión bajo se agrega delante del nombre de la función, y C ++ debe admitir la sobrecarga de funciones, los espacios de nombres, etc., lo que hace que las reglas de modificación de nombres de C ++ sean más complicadas. En C ++, se utiliza un mecanismo llamado Name Mangling. Name Mangling es un mecanismo que reorganiza los nombres de funciones y variables durante el proceso de compilación. En términos simples, el compilador pasa funciones a través de un algoritmo determinado para distinguir entre funciones., Re -decorado con un nombre único a nivel mundial.

  • externo "C"

La función principal de extern "C" es implementar correctamente el código C ++ llamando a otros códigos de lenguaje C. Después de agregar la "C" externa, se le indicará al compilador que compile esta parte del código en lenguaje C en lugar de C ++. Dado que C ++ admite la sobrecarga de funciones, el compilador agregará los tipos de parámetros de la función al código compilado al compilar la función, no solo el nombre de la función; y el lenguaje C no admite la sobrecarga de funciones, así que compile C La función del código de lenguaje no incluye el tipo de parámetro de la función y generalmente incluye el nombre de la función.
Esta función es muy útil, porque antes de la llegada de C ++, se escribía mucho código en lenguaje C, y la biblioteca de muy bajo nivel también se escribía en lenguaje C. Para soportar mejor el código C original y el ya escrito Biblioteca de lenguaje C, es necesario soportar C tanto como sea posible en C ++, y extern "C" es una de las estrategias.

Esta función se utiliza principalmente en las siguientes situaciones:

1. El código C ++ llama al código en lenguaje C

2. Usado en archivos de encabezado de C ++

3. En el desarrollo colaborativo de varias personas, algunas personas pueden ser mejores en el lenguaje C, y algunas personas son buenas en C ++, también será útil en este caso.

En general, el conocimiento en esta sección se resume en las siguientes preguntas:
1. ¿Pueden las siguientes dos funciones formar sobrecargas?

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

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

No formará sobrecarga, la sobrecarga de funciones no tiene nada que ver con la predeterminada, tiene que ver con el tipo

2. ¿Por qué no se puede sobrecargar la función de soporte del lenguaje C?
Debido a que las reglas de modificación de nombre del lenguaje C son muy simples, el nombre de la función también hará que el compilador no pueda distinguir

3. ¿Cómo se maneja la capa inferior de sobrecarga de funciones en C ++?
C ++ usa tecnología de alteración de nombres (inclinación) para cambiar el nombre de la función y distinguir funciones del mismo nombre con diferentes parámetros

4. ¿Se puede compilar una función en estilo C en C ++?
Sí, agregue extern "C" delante de la función para decirle al compilador que compile la función de acuerdo con las reglas del lenguaje C

Supongo que te gusta

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