SORU
31 Temmuz 2013, ÇARŞAMBA


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
31 Temmuz 2013, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NYCarspotter

    NYCarspotter

    26 EYLÜL 2011
  • o0oCyrusViruso0o

    o0oCyrusViru

    11 Mart 2008
  • Paul Schroder

    Paul Schrode

    30 Kasım 2007