It recently came to my attention o üye fonksiyonları serbest fonksiyonlar sınıf içinde aynı adla tamamen gölgesi. Ve tamamen demek istediğim, aynı ada sahip her bir serbest fonksiyonun aşırı yükleme çözünürlüğü için hiç dikkate alınmadığı. Ben böyle somwthing ile bitti neden anlayabiliyorum:Sınıf üyesi neden aynı isimle gölge içermeyen işlevler çalıştırıyor?
işlevleri özdeş imzalara sahipvoid f();
struct S
{
void f();
void g()
{
f(); // calls S::f instead of ::f
}
};
, Değişken etki alanı olarak sadece doğal aynı şekilde çalışır. Ben sınıf içinde gelen serbest fonksiyonu gölgeli çağırmak nasıl sormuyorum
void f();
struct S
{
void f(int x);
void g()
{
f(); // fails to compile attempting to call S::f, which has wrong signature
}
};
: ücretsiz işlevi aşağıdaki gibi farklı imza sahip olduğu Ama neden unambigious aramalar engellenir. Bilmek istediğim bu tasarımın ardındaki mantıktır.
Bjarne Stroustrup'a sormanız gerekebilir! – peacemaker
Bunun gibi arama, oluşturulan aday işlevlerin listesinin her zaman küçük olduğu anlamına gelir. Derleme zamanları için iyi, tüm olası adayları (ADL dahil) aradıysa ve çok hızlı bir şekilde çok yavaş alacağı birçok şablon bulunduğunu hayal edebilirsiniz. Ayrıca çoğu durumda kullanımı ve istenen semantiği yansıtır. Normalde "foo" dediğinizde, en yakın olan "foo" dır. En yakın olanı değilse, bir hata yapması muhtemeldir. Bir hata, çalışma zamanında gerçekleşen tuhaf şeylerden daha iyidir. Yerel şeyler tutmak iyi bir davranış. – Flexo
Bu sunumun, Name Lookup'da (http://channel9.msdn.com/Series/C9-Lectures-Stephan-T-Lavavej-Core-C-/Stephan-T-Lavavej-Core-C-1-of -n – MFH