SORU
9 EKİM 2013, ÇARŞAMBA


Ne'In C silinmiş bir işlevi tam semantiği 11?

struct A
{
    A();

    A(const A&);
    A& operator =(const A&);

    A(A&&) = delete;
    A& operator =(A&&) = delete;
};

struct B
{
    B();

    B(const B&);
    B& operator =(const B&);    
};

int main()
{
    A a;
    a = A(); // error C2280

    B b;
    b = B(); // OK
}

Benim derleyici VC 2013 RC.

hata C2280: '&:: A = & & () operatörü' : referans için çalışıyor fonksiyon silinmiş

Ben sadece derleyici A& operator =(A&&) silinir A& operator =(const A&); denemek yok neden acaba?

Bu davranış, C standardı tarafından tanımlanmış?

CEVAP
9 EKİM 2013, ÇARŞAMBA


a = A(); // error C2280

Sağdaki ifadenin operator=(A&&) arayacaktır ve silinir görür, yani geçicidir. Dolayısıyla hata. Daha fazla arama yok.

=delete yapardeğil"beni kullanmayın, bunun yerine kullanıngelecekiyi biri". Bunun yerine, "beni kullanma . anlamına gelir ^em>bana ihtiyacın olduğunda&; yerine yalnız vahşi -."

Burada başka bir örnek. Eğer benim sınıf X örneklerine yalnızca long ile oluşturulmasını istiyorumbaşka bir türüeğer uzun!) dönüştürür bile (, sonra class X olarak ilan ediyorum

struct X
{
     X(long arg); //ONLY long - NO int, short, char, double, etc!

     template<typename T>
     X(T) = delete;
};

X a(1);  //error - 1 is int 
X b(1L); //ok    - 1L is long

Aşırı yükleme çözünürlüğü anlamına geliryapılan öncederleyici =delete kısmını görür-ve böylece bir hata nedeniyle oluşurseçiliaşırı silinmiş bulundu.

Bu yardımcı olur umarım.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Film Riot

    Film Riot

    16 NİSAN 2006
  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • listedabive

    listedabive

    30 Ocak 2007