. Bu kodun bak:Fonksiyon aşırı yük fonksiyonlarıyla ilgili bir fonksiyon işaretçisi
#include<iostream>
void fv(int){}
void fc(const int){}
void fvr(int&){}
void fcr(const int&){}
void fm(void(*fun)(const int))
{
std::cout << "Constant called" << std::endl;
}
//void fm(void(*fun)(int))
//{
// std::cout << "non Constant called" << std::endl;
//}
void fm(void(*fun)(const int&))
{
std::cout << "Constant ref called" << std::endl;
}
void fm(void(*fun)(int&))
{
std::cout << "non Constant ref called" << std::endl;
}
int main()
{
fm(&fc);
fm(&fv);
fm(&fvr);
fm(&fcr);
return 0;
}
eğer yorumsuz statik const değeri kabul fonksiyon üzerindeki değeri ve gösterici tarafından parametresini kabul işlevini gösterici tarafından işlevi aşırı olamayacağını derleyici bulmak void fm(void(*fun)(int))
fonksiyonu. Ayrıca, void(*fun)(const int)
uncomment ve void(*fun)(const int)
yorumunu yaparsanız, tüm bunlar başarıyla derler. Ancak, referansları kullanırsak Tamam derler. Neden anlama, lütfen bana açıklayabilir misin? Bu, parametreyi değer ve const değerine göre kabul eden işlevlerin aynı tür olduğu anlamına mı geliyor?
UPD: Top-level const doesn't influence a function signature Üst düzey const'ın neden kaldırılması gerektiği konusunda iyi bir açıklama var.
neden değerler için düştü ve referanslar için düşmedi? – brachistochron
@brachistochron, sadece referans olarak en üst düzey const değil. – ForEveR
evet, al, teşekkürler. ama hala bu şekilde çalıştığını anlayamıyorum =) – brachistochron