私は最近、libxml ++(libxml2用のC++ラッパー)を使用している間、非常に興味深い不一致を見つけました。std :: listの割り当てに関するlibstdC++の不具合?
ライブラリは、デフォルトのSTLリストコンテナ(std::list<xmlpp::Node*>
)を使用してノードリストを返します。 デフォルトのリポジトリからインストールされているので、C++ 03モードでビルドされているようです(しかし、私はC++ 11で作業しています)。
ここでの注意点は、C++ 11が方法を変更したことです。std::list::size()
。
C++ 03では、O(n)で、毎回std::distance(begin(), end())
を呼び出しました。そして、事前計算された値を返します。ここで
/** Returns the number of elements in the %list. */
size_type
size() const _GLIBCXX_NOEXCEPT
{
#ifdef __GXX_EXPERIMENTAL_CXX0X__
return this->_M_impl._M_size;
#else
return std::distance(begin(), end());
#endif
}
物事は私がライブラリーから、そのようなリストを受け取り、それにsize()
を呼び出すときに発生し始めます。そこで私は140734320138496のような値を読んでいます。これは明らかに初期化されていないカウンタを示しています。元のリストにはカウンターが全くありませんでした。
手動でstd::distance (list.begin(), list.end())
を呼び出すことはもちろん可能です。
質問は - これはGCC/libstdC++のバグと見なすことができますか、別のGCCモードでビルドされた実行ファイルを決してリンクしないでください。
あ、そうです。ありがとう。 – intelfx