Nasıl belirsizlik aşırı çözünürlükte tespit algoritması?
Aşırı yükleme çözümlemesi yöntemini anlamaya çalışıyorum.
Neden bu belirsiz
void func(double, int, int, double) {}
void func(int, double, double, double) {}
void main()
{
func(1, 2, 3, 4);
}
ama bu değil mi?
void func(int, int, int, double) {}
void func(int, double, double, double) {}
void main()
{
func(1, 2, 3, 4);
}
İlk durumda 2 Tam parametreleri maçları ve 2 dönüşümleri karşı 1 tam eşleme ve 3 dönüşümler, ve ikinci durumda orada tam 3 maç ve 1 dönüşüm karşı 1 tam eşleşir ve 3 dönüşüm.
Neden bir ve belirsiz değil mi? Buradaki mantık nedir?
CEVAP
Aşırı çözünürlük kuralları sadece belirli bir kısmi sipariş kümesinin tüm maçlar - eğer bir aşırı yük F1
Daha iyi bir maç daha F2
, değil ima F2
daha iyi bir maç daha F1
. Tam kısmi sipariş bağımsız değişkenleri k
nerede k
Boyutlar, iki nokta karşılaştırma olarak düşünülebilir. k
-dim uzayda puanları bu kısmi sipariş tanımlama (x_1, x_2,..., x_k) < (y_1, y_2,..., y_k) if x_i <= y_i for all i and x_j < y_j for at least one j
sağlar. Bu tam olmayan şablon fonksiyonları standart tarafından tanımlanan aday kısmi sipariş.
Sağlar senin örneklere bakın :
void func(double, int, int, double) {}
vvv vvv vvv
better better equal
void func(int, double, double, double) {}
vvv vvv
better equal
Ne aşırı diğerine göre kesinlikle daha iyi.
İkinci örnek:
void func(int, int, int, double) {}
vvv vvv vvv vvv
equal better better equal
void func(int, double, double, double) {}
vvv
equal
Şimdi, ilk aşırı ama bir argüman ikinci daha iyi olduğunu VE asla ikinci daha kötü. Böylece, belirsizlik yok - kısmi sipariş aslında ilkini daha ilan ediyor.
(Yukarıdaki açıklama işlev şablonları dikkate almaz. *.* 16) daha fazla bilgi bulabilirsiniz
Nasıl olsa bir ara ekleme döngü aşırı ...
Nasıl JavaScript devre dışı olup olmad...
Nasıl C/C tamsayı taşması tespit etmek...
Nasıl Kredi Kartı tip numarası göre te...
Nasıl iki ışının kesiştiği tespit ediy...