SORU
20 EKİM 2008, PAZARTESİ


Neden't C derleyicileri bir operatör ve operatör== tanımlayın!=?

Mümkün olduğunca derleyici sizin için çok fazla iş yapmak gibi icar büyük bir hayranıyım. Derleyici için aşağıdaki verebilir basit bir sınıf yazarken 'özgür':

  • Varsayılan (boş) kurucusu
  • Kopya yapıcı
  • Bir yıkıcı
  • Atama operatörü (operator=)

Ancak herhangi bir karşılaştırma operatörleri - operator== operator!= gibi görünüyor. Örneğin:

class foo
{
public:
    std::string str_;
    int n_;
};

foo f1;        // Works
foo f2(f1);    // Works
foo f3;
f3 = f2;       // Works

if (f3 == f2)  // Fails
{ }

if (f3 != f2)  // Fails
{ }

Bunun için iyi bir nedeni var mı? Neden sahne-üye-üye bir karşılaştırma bir problem olur mu? Açıkçası eğer sınıfı bellek ayırırsa o zaman çok dikkatli olmak istersin, ama basit bir sınıf çünkü derleyici sizin için bunu yapabilir mi?

CEVAP
20 EKİM 2008, PAZARTESİ


Eğer derleyici varsayılan bir kopya kurucu sağlayabilir, 5* *benzer bir varsayılan sağlamak gerekir savı anlamda belirli bir miktar yapar. Bence bu sebepten karar vermeme derleyici tarafından oluşturulan bir varsayılan için bu operatör olabileceğini tahmin ederek ne Stroustrup hakkında söylediği varsayılan kopya yapıcı "Tasarım ve Evrim C" (Bölüm 11.4.1 - Kumanda Kopyalama):

Ben şahsen bu talihsiz düşünün kopyalama işlemleri tarafından tanımlanmış olan varsayılan ve kopyalama İ yasakla derslerim pek çok nesne. Ancak, C, varsayılan miras atama ve kopya yapıcılar C, ve sık sık kullanılır.

Bu yüzden "neden C varsayılan operator==()? yok" yerine, soru şu olmalıydı: "neden C varsayılan bir atama var mı ve yapıcı duyuyor musun?", ile cevap olmak bu öğeler vardı dahil isteksizce tarafından Stroustrup için geriye dönük uyumluluk ile C (muhtemelen neden çoğu C 'nin siğiller, ama aynı zamanda muhtemelen başlıca nedeni C 'nin popülaritesinin).

Benim kendi amaçları, benim IDE parçacığını kullanmak için yeni sınıflar içerir bildirimleri için özel bir atama operatörü ve kopya kurucu o zaman ben gen yeni bir sınıf yok varsayılan atama ve kopyalama işlemleri - açıkça kaldırmak Bildirgesi bu faaliyetler private: Bölüm istersem derleyici yapabilmek için üretmek benim için.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Chaoticmoogle

    Chaoticmoogl

    13 ŞUBAT 2006
  • GALERNAYA20

    GALERNAYA20

    19 NİSAN 2011
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011