Neden std::bitset::reference
ve std::vector<bool>::reference
açık bir yıkıcıyı (derleyici oluşturulmamış) belirtir neden merak ediyorum. Örneğin, boost::dynamic_bitset::reference
böyle bir yıkıcı belirtmiyor gibi görünüyor. Standart bir yıkıcısı olarak ~reference()
bahsederNeden C++ standardı std :: bitset :: reference için bir yıkıcıyı belirtir?
cevap
diye, (libstdc++ ve SGI/STL bunu nasıl olan) o kullanıcı tarafından sağlanan bir no-op {}
olarak olması gerektiği anlamına gelmez. Ayrıca, kullanıcı tarafından =default
olarak bildirilebilir veya hatta örtülü olarak tanımlanmış olabilir (libc++ bunu nasıl yapar?). Ne olursa olsun, Standart kaldırılan yıkıcı sözünü açık olacak şekilde güncellenebilir. Yazımsal bir değişiklik yapabilirsin (bunun gerçek bir teklif olduğunu düşünmüyorum).
@BoPersson tarafından yorumlarda belirtildiği gibi, std::bitset
, Standard Library'nin çok eski bir bileşenidir. Özelliklerinin çoğu (imzasız tamsayı örtülü kurucu, üye olmayan operator==
yerine üye) 1998'de dil standardizasyonundan önce. Utanmaz fişler: bkz. Bunun nasıl ortaya çıkabileceğiyle ilgili daha fazla tartışma için this Q&A ve neden düzeltilebileceğini öğrenmek için this Q&A.
<rant mode>
std::bitset
mirası dışına iyi yolu namespace experimental
bir temiz olacak olacaktır. Tercihen, bu aynı zamanda std::bitset
'un karışık soyutlamasını da çözer ve aynı zamanda array<bool>
'un yanı sıra set<int>
'un bir alan optimize edilmiş versiyonu olmaya çalışır. İdeal olarak, bu soyutlamaları sağlayan bir bool_array<N>
ve bir bounded_int_set<N>
için bir teklif olacaktır. Benzer şekilde, bool_vector<Alloc>
(şu anda vector<bool, Alloc>
olarak bilinir) ve int_set<Alloc>
(şu anda boost::dynamic_bitset
ve boost::container::flat_set<int, Alloc>
'un bir karışımı) tanımlanabilir.
</rant mode>
Birisi 1990'larda bu kadar yazdım ve kimse beri bunu değiştirmeye önerdi? Başka sebep yok sanırım. –