2012-10-02 26 views
5

Fonksiyon aşırı yüklenmesi, biri const olarak bildirilmişse, aynı sayıda parametreye sahip olan iki üye işlevi arasında gerçekleşebilir.const parametrelerinde aşırı yüklenme işlevi

Ancak, bir işlevde const argümanı varsa, diğerinde aynı türde const non argümanı var? Referanslar ve işaretçiler için işe yarayacak mı? C++ bunu sağlıyorsa, neden sağlanıyor? Eğer biliyorsanız, lütfen benimle paylaşın.

Yukarıdaki senaryoyu anlamanıza yardımcı olan örnek aşağıdadır.

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

Çıktı: Derleyici Hata: 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; 
} 

Çıktı: ikincisi C izin verilir Neden const eğlenceli()

denilen ++?

+2

'void fun (char * const a) ile deneyin' ' – PiotrNycz

+0

Cevabım hala eksik mi? Eğer evetse, lütfen bana söyleyin, böylece onu geliştirebilirim. :) Yoksa, kabul etmeyi önerebilir miyim? – Xeo

cevap

9

İlkinin parametreleri üst düzeyconst'dur. Bu, işlevin parametrenin değerini değiştiremediği anlamına gelir, ancak arayanın umurunda değil: Arayan, argümanın kopyasını alır, böylece bir parametre üst düzey ise, bu bir uygulama detayıdır. aşırı ikinci seti için

void f(int); // forward declare 

void g(){ f(42); } 

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

, const üst düzey artık değil: Aşağıdaki işler unutmayın. Arayanın,işaretçisinin işaretçisini gösterip göstermeyeceğini belirler. Bir arayan olarak, bu konuda bakımını yaparsınız. Artık sadece bir uygulama detayı değil.

+2

Çiftin 3. işlevin geçersiz olduğunu unutmaya değer (char * const a) ' – PiotrNycz

İlgili konular