2015-12-18 5 views
5

私はなぜstd::bitset::referencestd::vector<bool>::referenceが明示的なデストラクタ(コンパイラが生成したものではない)を指定しているのだろうと思います。例えば、boost::dynamic_bitset::referenceはそのようなデストラクタを指定していないようです。C++標準でstd :: bitset :: referenceのデストラクタが指定されているのはなぜですか?

+8

誰かが1990年代にこれを書いた、と誰も以来、それを変更することを提案していませんか?他の理由はありません。 –

答えて

3

標準デストラクタとして~reference()に言及したからといって、それがユーザー提供(libstdc++SGI/STLがそれを行う方法です)ノーオペレーション{}ようにする必要があり意味するものではありません。また、ユーザが=defaultと宣言したり、暗黙的に左に定義したりすることもできます(libc++と同じです)。それにかかわらず、スタンダードは、削除されたデストラクタのこの明示的な記述を更新することができます。あなたは編集上の変更を提出することができます(私はそれが本当の提案を保証するとは思わない)。

コメントの中の@BoPerssonによると、std::bitsetは標準ライブラリの非常に古いコンポーネントです。多くの機能(符号なし整数の暗黙のコンストラクタ、非メンバではないメンバoperator==)は、1998年に言語標準化に先行しています。恥知らずのプラグです。 this Q&Aこれがどのように発生したかについての詳細は、this Q&Aを参照してください。

<rant mode>

std::bitsetの遺産のうち最良の方法は、namespace experimentalでクリーンな休憩となります。これは、std::bitsetの混合抽象化を解決することも好ましく、同時にarray<bool>およびset<int>の空間最適化バージョンを試行する。理想的には、これらの抽象化を提供するbool_array<N>bounded_int_set<N>の提案があります。同様に、bool_vector<Alloc>(現在はvector<bool, Alloc>として知られている)およびint_set<Alloc>(現在はboost::dynamic_bitsetboost::container::flat_set<int, Alloc>の混合物)を定義することができます。

</rant mode>

関連する問題