Derleyicinin sizin için olabildiğince fazla çalışmasına izin verme büyük bir hayranıyım. Basit bir sınıf yazarken derleyici size 'ücretsiz' için aşağıdakileri verebilir:
- Varsayılan (boş) bir yapıcı
- Bir kopya oluşturucu
- Bir yıkıcı
- Bir atama operatörü (
operator=
)
Ancak size herhangi bir karşılaştırma operatörü veremiyor gibi görünüyor - operator==
veya operator!=
. Ö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 neden var mı? Neden bir üye-üye karşılaştırması yapmak sorun olur? Eğer sınıf hafızayı ayırırsa, o zaman dikkatli olmak istersiniz, ancak basit bir sınıf için derleyici bunu sizin için yapabilir mi?
==
, =
belirli bir koşulda varsayılan bir otomatik atama ( ) olduğu gibi , varsayılan bir otomatik olmamanın bir hata olduğunu belirtti . (Mantık için de geçerlidir, çünkü önerilerle ilgili argüman tutarsız =
ve ==
ve sadece saniye).