Nesne, rvalue başvurusu, sabit başvuru arasında aşırı çözümleme
Tüm üç işlevi göz önüne alındığında, bu ara belirsiz.
int f( int );
int f( int && );
int f( int const & );
int q = f( 3 );
f( int )
kaldırma hem Çınlama ve GCC lvalue başvurusu üzerine rvalue başvurusunu tercih etmelerine neden olur. Ama onun yerine iki referans yük kaldırma f( int )
belirsizlik olur.
Aşırı çözümleme genellikle şartların sıkı bir kısmi sıralama yapılır, ama int
birbirine eşdeğer olan iki şey eşdeğer gibi görünüyor. Burada kural nedir? Bu kusur bir rapor hatırlıyorum.
int &&
gelecekte bir standart int
tercih olabilir herhangi bir şans var mı? Başvuru bir başlatıcı bağlamak gerekir, nesne türü kısıtlanmaması oysa. T
T &&
arasında aşırı etkili "eğer mülkiyet, başka bir kopyasını aldım eğer varolan bir nesne kullanın." demekti (Bu-by pass-değeri saf benzer, ama hareketli yükü kaydeder.) Bu Derleyiciler şu anda iş olarak, bu T const &
T &&
, aşırı ve açıkça kopyalayarak yapılması gerekir. Ama kesinlikle standart olduğunu bile bile emin değilim.
CEVAP
Burada kural nedir?
Tek bir parametre olduğu gibi, kural, parametre üçü geçerli parametre başlatmaları biri olmalıdırdaha iyi bir maçdahaher ikisi dediğer ikisi. İki başlatmaları karşılaştırıldığında, ya da biri diğerinden daha iyi ya da ne kadar iyi (ikisini birbirinden ayırt etmek imkansız).
Doğrudan başvuru bağlama hakkında özel kurallar olmadan, üç başlatmaları bahsedilen ayırt edilemez (üç karşılaştırmalar) olurdu.
Doğrudan başvuru bağlama hakkında özel kurallar int&&
const int&
, daha iyi yapmak ama ne kadar iyi ya da int
daha da kötü. Bu nedenle en iyi maçı yok:
S1 S2
int int&& indistinguishable
int const int& indistinguishable
int&& const int& S1 better
int&&
13.3.3.2 çünkü: const int&
daha iyidir
S1 ve S2 referans bağlamaları (8.5.3) ve ne ifade eder örtülü bir nesne parametresi, bir statik olmayan üye işlev ilan olmadan bir ref-eleme ve S1 bağlar bir rvalue başvuru için bir rvalue ve S2 bağlar bir lvalue başvuru.
Ama bu kural başlatmaları bir başvuru bağlayıcı olmadığında geçerli değildir.
Her fırsatta int tercih edilebilir && gelecekte bir standart int var mı? Başvuru bir başlatıcı bağlamak gerekir, nesne türü kısıtlanmaması oysa. T ve T arasında etkili "eğer mülkiyet, başka bir kopyasını aldım eğer varolan bir nesne kullanın." anlamına gelebilir ve aşırı yani
Size referans dışı bir bağlama daha bir başvuru daha iyi bir maç bağlama yapmak için teklif. Neden 18* *senin fikrin post değil. ÇOK öznel tartışma / görüş için iyi değil.
Başvuru servis Hata: kod oluşturmak iç...
Tırnak işaretleri olmadan tırnak tuşla...
Web Başvurusu vs Hizmet Başvuru...
Neden değil't bu başka bir şey at...
Python Çoklu işlem: arasında salt okun...