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
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.
Taşıma semantiği ve işlevi sipariş değ...
Neden Haskell's "hiçbir şey ...
Nasıl bu kabuk işlevi bir değişken çık...
Python dize işlevi doğal yapılı bir tü...
C dize değiştirmek için işlevi nedir?...