2012-10-02 24 views
5

sobrecarga de funciones puede ocurrir entre dos funciones miembro que tienen el mismo número de parámetros, si uno de ellos se declara como const.sobrecarga de funciones con parámetros const

Pero lo que si una función tiene un argumento const, otro argumento que no tiene const del mismo tipo? ¿Funcionará para referencias y punteros? Si C++ lo proporciona, ¿por qué proporciona? Por favor comparte la razón conmigo si lo sabes.

A continuación se muestra el ejemplo que le ayuda en la comprensión de la situación anterior.

void fun(const int i) 
{ 
    cout << "fun(const int) called "; 
} 
void fun(int i) 
{ 
    cout << "fun(int) called " ; 
} 
int main() 
{ 
    const int i = 10; 
    fun(i); 
    return 0; 
} 

de salida: Error del compilador: redefinition of 'void fun(int)'

void fun(char *a) 
{ 
    cout<<"non-const fun() called"; 
} 

void fun(const char *a) 
{ 
    cout<<"const fun() called"; 
} 

int main() 
{ 
    const char *ptr = "GeeksforGeeks"; 
    fun(ptr); 
    return 0; 
} 

de salida: diversión const() llama

¿Por qué se permite que el segundo en C++?

+2

Pruebe con 'void diversión (const char * a)' – PiotrNycz

+0

es algo todavía faltaba a mi respuesta? Si es así, por favor dígame, para que pueda mejorarlo. :) Si no es así, ¿puedo sugerir que lo acepte? – Xeo

Respuesta

9

Los primeros parámetros son de nivel superiorconst. Esto significa que la función no puede cambiar el valor del parámetro, sin embargo, a la persona que llama no le importa: el destinatario recibe una copia del argumento, por lo que si un parámetro tiene de nivel superiorconst, es un detalle de implementación. Tenga en cuenta que las siguientes obras:

void f(int); // forward declare 

void g(){ f(42); } 

void f(int const i){ /*...*/ } // define above declared function 

Para el segundo conjunto de sobrecargas, el const no es de nivel superior más. Describe si el destinatario puede cambiar lo que indica el puntero al. Como persona que llama, usted do se preocupa por eso. Ya no es solo un detalle de implementación.

+2

Vale la pena tener en cuenta que el par de la tercera función es 'void fun (char * const a)' – PiotrNycz

Cuestiones relacionadas